diff --git a/.github/workflows/phan.yml b/.github/workflows/phan.yml new file mode 100644 index 0000000000000..8fdfeeb3ccfff --- /dev/null +++ b/.github/workflows/phan.yml @@ -0,0 +1,32 @@ +--- +on: [pull_request, push] +name: phan +jobs: + phan: + name: Run phan + runs-on: ubuntu-latest + container: + image: phanphp/phan:latest + steps: + - name: Link paths + shell: sh + run: | + ln -s $GITHUB_WORKSPACE /mnt/src + apk add git + + - name: Checkout + uses: actions/checkout@v4 + + - name: Run Phan + run: | + cd /mnt/src + set -o pipefail + /opt/phan/phan --quick -k .phan/config.php -B .phan/baseline.txt --analyze-twice --minimum-target-php-version 7.1 | tee phan.log + + - name: Provide phan log as artifact + uses: actions/upload-artifact@v3 + if: ${{ always() }} + with: + name: phan-srcrt + path: ${{ github.workspace }}/phan.log + retention-days: 5 diff --git a/.phan/baseline.txt b/.phan/baseline.txt new file mode 100644 index 0000000000000..8addd80272fca --- /dev/null +++ b/.phan/baseline.txt @@ -0,0 +1,326 @@ + [ + 'htdocs/accountancy/admin/card.php' => ['PhanPluginDuplicateExpressionAssignment'], + 'htdocs/accountancy/class/bookkeeping.class.php' => ['PhanUndeclaredTypeParameter'], + 'htdocs/accountancy/class/lettering.class.php' => ['PhanParamSuspiciousOrder'], + 'htdocs/accountancy/journal/purchasesjournal.php' => ['PhanPluginDuplicateExpressionBinaryOp'], + 'htdocs/accountancy/journal/sellsjournal.php' => ['PhanPluginDuplicateExpressionBinaryOp'], + 'htdocs/adherents/card.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/adherents/class/adherentstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/adherents/stats/geo.php' => ['PhanTypeArraySuspiciousNull'], + 'htdocs/adherents/type.php' => ['PhanPluginDuplicateExpressionBinaryOp'], + 'htdocs/admin/emailcollector_card.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/admin/geoipmaxmind.php' => ['PhanUndeclaredConstant'], + 'htdocs/admin/receiptprinter.php' => ['PhanRedefineFunctionInternal'], + 'htdocs/api/class/api.class.php' => ['PhanUndeclaredClassStaticProperty', 'PhanUnreferencedUseNormal'], + 'htdocs/api/index.php' => ['PhanParamTooMany'], + 'htdocs/barcode/printsheet.php' => ['PhanPluginDuplicateExpressionBinaryOp'], + 'htdocs/bom/bom_list.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/bom/tpl/objectline_create.tpl.php' => ['PhanUndeclaredThis'], + 'htdocs/bom/tpl/objectline_edit.tpl.php' => ['PhanUndeclaredThis'], + 'htdocs/bom/tpl/objectline_view.tpl.php' => ['PhanUndeclaredThis'], + 'htdocs/categories/viewcat.php' => ['PhanPluginDuplicateExpressionBinaryOp'], + 'htdocs/collab/index.php' => ['PhanParamTooMany'], + 'htdocs/comm/action/card.php' => ['PhanPluginDuplicateIfStatements', 'PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/comm/action/index.php' => ['PhanTypeArraySuspiciousNull', 'PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/comm/action/pertype.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/comm/action/peruser.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/comm/mailing/card.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/comm/propal/class/propalestats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/comm/propal/list.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/commande/class/commandestats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/commande/list.php' => ['PhanNoopArrayAccess', 'PhanPluginDuplicateIfStatements'], + 'htdocs/compta/accounting-files.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/compta/bank/annuel.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/compta/bank/bankentries_list.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/compta/bank/graph.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/compta/bank/various_payment/card.php' => ['PhanPluginDuplicateExpressionAssignment'], + 'htdocs/compta/cashcontrol/cashcontrol_card.php' => ['PhanPluginDuplicateExpressionBinaryOp'], + 'htdocs/compta/cashcontrol/class/cashcontrol.class.php' => ['PhanUndeclaredTypeParameter'], + 'htdocs/compta/deplacement/class/deplacementstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/compta/facture/card.php' => ['PhanPluginDuplicateExpressionAssignment'], + 'htdocs/compta/facture/class/facture.class.php' => ['PhanPluginDuplicateExpressionBinaryOp'], + 'htdocs/compta/facture/class/facturestats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/compta/facture/list.php' => ['PhanPluginDuplicateIfCondition'], + 'htdocs/compta/journal/purchasesjournal.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/compta/journal/sellsjournal.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/compta/paiement/class/paiement.class.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/compta/resultat/index.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/compta/sociales/card.php' => ['PhanUndeclaredConstantOfClass'], + 'htdocs/compta/sociales/class/chargesociales.class.php' => ['PhanPluginDuplicateExpressionAssignment'], + 'htdocs/compta/sociales/class/paymentsocialcontribution.class.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/compta/stats/index.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/compta/stats/supplier_turnover.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/compta/tva/card.php' => ['PhanTypeInvalidUnaryOperandNumeric', 'PhanUndeclaredConstantOfClass'], + 'htdocs/compta/tva/class/paymentvat.class.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/compta/tva/class/tva.class.php' => ['PhanTypeMissingReturn'], + 'htdocs/contrat/card.php' => ['PhanPluginDuplicateExpressionAssignment'], + 'htdocs/contrat/class/contrat.class.php' => ['PhanPluginDuplicateExpressionAssignment', 'PhanUndeclaredFunctionInCallable'], + 'htdocs/core/actions_massactions.inc.php' => ['PhanParamTooFew', 'PhanPluginDuplicateIfStatements'], + 'htdocs/core/boxes/box_graph_new_vs_close_ticket.php' => ['PhanRedundantArrayValuesCall'], + 'htdocs/core/class/commondocgenerator.class.php' => ['PhanTypeArraySuspiciousNull'], + 'htdocs/core/class/commoninvoice.class.php' => ['PhanTypeMissingReturn'], + 'htdocs/core/class/commonobject.class.php' => ['PhanPluginDuplicateIfCondition', 'PhanPluginDuplicateIfStatements'], + 'htdocs/core/class/dolgeoip.class.php' => ['PhanTypeMagicVoidWithReturn', 'PhanUndeclaredFunction'], + 'htdocs/core/class/dolgraph.class.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/core/class/dolreceiptprinter.class.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/core/class/evalmath.class.php' => ['PhanPluginUnsafeEval'], + 'htdocs/core/class/extrafields.class.php' => ['PhanPluginDuplicateExpressionAssignment'], + 'htdocs/core/class/html.form.class.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/core/class/html.formmail.class.php' => ['PhanNoopArray'], + 'htdocs/core/class/html.formmargin.class.php' => ['PhanUndeclaredConstantOfClass'], + 'htdocs/core/class/menubase.class.php' => ['PhanTypeMagicVoidWithReturn'], + 'htdocs/core/class/rssparser.class.php' => ['PhanPluginDuplicateExpressionBinaryOp', 'PhanPluginDuplicateIfStatements', 'PhanUndeclaredFunctionInCallable'], + 'htdocs/core/class/translate.class.php' => ['PhanUndeclaredFunction'], + 'htdocs/core/commonfieldsinexport.inc.php' => ['PhanUndeclaredThis'], + 'htdocs/core/commonfieldsinimport.inc.php' => ['PhanUndeclaredThis'], + 'htdocs/core/db/Database.interface.php' => ['PhanUndeclaredTypeParameter'], + 'htdocs/core/db/DoliDB.class.php' => ['PhanUndeclaredTypeProperty'], + 'htdocs/core/db/mysqli.class.php' => ['PhanDeprecatedFunctionInternal', 'PhanParamSignatureMismatch', 'PhanPluginDuplicateIfStatements'], + 'htdocs/core/db/pgsql.class.php' => ['PhanParamSignatureMismatch', 'PhanTypeMagicVoidWithReturn'], + 'htdocs/core/db/sqlite3.class.php' => ['PhanParamSignatureMismatch', 'PhanTypeMagicVoidWithReturn'], + 'htdocs/core/extrafieldsinexport.inc.php' => ['PhanUndeclaredThis'], + 'htdocs/core/extrafieldsinimport.inc.php' => ['PhanUndeclaredThis'], + 'htdocs/core/lib/files.lib.php' => ['PhanPluginDuplicateExpressionBinaryOp', 'PhanPluginDuplicateIfCondition'], + 'htdocs/core/lib/ftp.lib.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/core/lib/functions.lib.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginDuplicateArrayKey', 'PhanPluginDuplicateIfCondition', 'PhanPluginInvalidPregRegexReplacement', 'PhanPluginUnsafeEval', 'PhanRedefineFunctionInternal'], + 'htdocs/core/lib/functions2.lib.php' => ['PhanDeprecatedFunctionInternal', 'PhanParamSuspiciousOrder', 'PhanPluginUnsafeEval'], + 'htdocs/core/lib/json.lib.php' => ['PhanPluginUnsafeEval', 'PhanRedefineFunctionInternal'], + 'htdocs/core/lib/modulebuilder.lib.php' => ['PhanPluginLoopVariableReuse'], + 'htdocs/core/lib/pdf.lib.php' => ['PhanAccessMethodProtected'], + 'htdocs/core/lib/usergroups.lib.php' => ['PhanNoopArrayAccess'], + 'htdocs/core/menus/standard/auguria_menu.php' => ['PhanParamSuspiciousOrder', 'PhanPluginDuplicateIfStatements', 'PhanUndeclaredVariable'], + 'htdocs/core/menus/standard/eldy_menu.php' => ['PhanParamSuspiciousOrder', 'PhanPluginDuplicateIfStatements'], + 'htdocs/core/menus/standard/empty.php' => ['PhanParamSuspiciousOrder', 'PhanPluginDuplicateIfStatements', 'PhanUndeclaredVariable'], + 'htdocs/core/modules/action/rapport.class.php' => ['PhanUndeclaredTypeParameter'], + 'htdocs/core/modules/asset/mod_asset_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/bank/doc/pdf_ban.modules.php' => ['PhanUndeclaredTypeParameter'], + 'htdocs/core/modules/barcode/mod_barcode_thirdparty_standard.php' => ['PhanParamSignatureMismatch'], + 'htdocs/core/modules/bom/mod_bom_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/cheque/mod_chequereceipt_mint.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/commande/mod_commande_marbre.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/contract/doc/pdf_strato.modules.php' => ['PhanUndeclaredTypeParameter', 'PhanUndeclaredVariable'], + 'htdocs/core/modules/contract/mod_contract_serpis.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/delivery/mod_delivery_jade.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/dons/html_generic.modules.php' => ['PhanUndeclaredVariable'], + 'htdocs/core/modules/expedition/doc/pdf_espadon.modules.php' => ['PhanUndeclaredVariable'], + 'htdocs/core/modules/expedition/mod_expedition_safor.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/expensereport/mod_expensereport_jade.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/facture/mod_facture_mars.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/facture/mod_facture_terre.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/facture/modules_facture.php' => ['PhanUndeclaredClassConstant'], + 'htdocs/core/modules/fichinter/mod_pacific.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/holiday/mod_holiday_madonna.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/hrm/mod_evaluation_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/import/import_xlsx.modules.php' => ['PhanTypeMagicVoidWithReturn'], + 'htdocs/core/modules/mailings/contacts1.modules.php' => ['PhanUndeclaredVariable'], + 'htdocs/core/modules/mailings/eventorganization.modules.php' => ['PhanUndeclaredVariable'], + 'htdocs/core/modules/mailings/thirdparties_services_expired.modules.php' => ['PhanUndeclaredVariable'], + 'htdocs/core/modules/member/doc/pdf_standard.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/core/modules/movement/doc/pdf_standard.modules.php' => ['PhanPluginDuplicateExpressionBinaryOp'], + 'htdocs/core/modules/mrp/doc/pdf_vinci.modules.php' => ['PhanTypeArraySuspiciousNull'], + 'htdocs/core/modules/mrp/mod_mo_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/oauth/generic_oauthcallback.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/core/modules/oauth/github_oauthcallback.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/core/modules/oauth/google_oauthcallback.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/core/modules/oauth/microsoft_oauthcallback.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/core/modules/oauth/stripelive_oauthcallback.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/core/modules/oauth/stripetest_oauthcallback.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/core/modules/payment/mod_payment_cicada.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/printing/printgcp.modules.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/core/modules/product_batch/mod_lot_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/product_batch/mod_sn_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/project/task/mod_task_simple.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/propale/doc/pdf_azur.modules.php' => ['PhanUndeclaredVariable'], + 'htdocs/core/modules/propale/doc/pdf_cyan.modules.php' => ['PhanTypeMissingReturn'], + 'htdocs/core/modules/propale/mod_propale_marbre.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/reception/mod_reception_beryl.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/societe/mod_codecompta_aquarium.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/core/modules/societe/modules_societe.class.php' => ['PhanPluginDuplicateIfCondition'], + 'htdocs/core/modules/stocktransfer/doc/pdf_eagle.modules.php' => ['PhanUndeclaredTypeParameter'], + 'htdocs/core/modules/stocktransfer/doc/pdf_eagle_proforma.modules.php' => ['PhanTypeMissingReturn', 'PhanUndeclaredVariable'], + 'htdocs/core/modules/stocktransfer/mod_stocktransfer_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/supplier_invoice/doc/pdf_canelle.modules.php' => ['PhanUndeclaredVariable'], + 'htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/supplier_proposal/doc/pdf_zenith.modules.php' => ['PhanUndeclaredVariable'], + 'htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/modules/syslog/mod_syslog_file.php' => ['PhanParamSignatureMismatch', 'PhanParamSuspiciousOrder', 'PhanPluginDuplicateArrayKey'], + 'htdocs/core/modules/syslog/mod_syslog_syslog.php' => ['PhanParamSignatureMismatch'], + 'htdocs/core/modules/takepos/mod_takepos_ref_simple.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/core/tpl/objectline_create.tpl.php' => ['PhanUndeclaredThis'], + 'htdocs/core/tpl/objectline_edit.tpl.php' => ['PhanUndeclaredConstantOfClass'], + 'htdocs/core/tpl/objectline_title.tpl.php' => ['PhanUndeclaredConstantOfClass', 'PhanUndeclaredThis'], + 'htdocs/core/tpl/objectline_view.tpl.php' => ['PhanUndeclaredConstantOfClass', 'PhanUndeclaredThis'], + 'htdocs/core/tpl/originproductline.tpl.php' => ['PhanUndeclaredThis'], + 'htdocs/core/triggers/interface_20_all_Logevents.class.php' => ['PhanUndeclaredVariable'], + 'htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php' => ['PhanUndeclaredVariable'], + 'htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php' => ['PhanPluginDuplicateExpressionAssignment'], + 'htdocs/core/triggers/interface_50_modTicket_TicketEmail.class.php' => ['PhanUndeclaredVariable'], + 'htdocs/datapolicy/class/actions_datapolicy.class.php' => ['PhanUndeclaredVariable'], + 'htdocs/debugbar/class/DataCollector/DolPhpCollector.php' => ['PhanPowerOfZero'], + 'htdocs/debugbar/class/DataCollector/DolQueryCollector.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/debugbar/class/DataCollector/DolibarrCollector.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/debugbar/class/TraceableDB.php' => ['PhanUndeclaredTypeParameter'], + 'htdocs/don/class/don.class.php' => ['PhanParamTooMany'], + 'htdocs/don/class/donstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/ecm/index_auto.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/emailcollector/class/emailcollector.class.php' => ['PhanUnreferencedUseNormal'], + 'htdocs/eventorganization/class/conferenceorbooth.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/expedition/class/expedition.class.php' => ['PhanUndeclaredVariable'], + 'htdocs/expedition/class/expeditionstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/expensereport/card.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/expensereport/class/expensereportstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/expensereport/class/paymentexpensereport.class.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/fichinter/class/fichinterrec.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/fichinter/class/fichinterstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/fourn/class/fournisseur.facture.class.php' => ['PhanPluginDuplicateExpressionBinaryOp', 'PhanUndeclaredVariable'], + 'htdocs/fourn/commande/card.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/holiday/define_holiday.php' => ['PhanPluginLoopVariableReuse'], + 'htdocs/hrm/core/tpl/objectline_view.tpl.php' => ['PhanUndeclaredThis'], + 'htdocs/hrm/position_card.php' => ['PhanUndeclaredVariable'], + 'htdocs/imports/import.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page179.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page180.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page181.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page182.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page183.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page184.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page185.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page186.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page187.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page188.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page189.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page190.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page191.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page192.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page193.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page194.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-corporate/containers/page195.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/page202.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-homesubmenu/containers/styles.css.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-noimg/containers/page80.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/page148.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-onepageblackpurple/containers/styles.css.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-restaurant/containers/page248.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-restaurant/containers/page249.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-restaurant/containers/page252.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-restaurant/containers/page253.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-restaurant/containers/styles.css.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-stellar/containers/page20.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-stellar/containers/page22.tpl.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/doctemplates/websites/website_template-stellar/containers/styles.css.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/install/fileconf.php' => ['PhanParamSuspiciousOrder'], + 'htdocs/install/upgrade2.php' => ['PhanUndeclaredVariable'], + 'htdocs/intracommreport/card.php' => ['PhanAccessPropertyStaticAsNonStatic'], + 'htdocs/intracommreport/list.php' => ['PhanAccessPropertyStaticAsNonStatic'], + 'htdocs/knowledgemanagement/core/modules/knowledgemanagement/mod_knowledgerecord_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/loan/class/paymentloan.class.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/master.inc.php' => ['PhanRedefineFunctionInternal'], + 'htdocs/modulebuilder/index.php' => ['PhanParamTooMany'], + 'htdocs/mrp/class/mo.class.php' => ['PhanParamSignatureMismatch', 'PhanUndeclaredVariable'], + 'htdocs/mrp/tpl/originproductline.tpl.php' => ['PhanUndeclaredThis'], + 'htdocs/partnership/core/modules/partnership/mod_partnership_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/product/admin/product_tools.php' => ['PhanNoopStringLiteral'], + 'htdocs/product/class/product.class.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/product/class/propalmergepdfproduct.class.php' => ['PhanTypeMagicVoidWithReturn'], + 'htdocs/product/popuprop.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/product/reassort.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/product/stats/card.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/product/stock/class/mouvementstock.class.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/product/stock/movement_card.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/product/stock/movement_list.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginDuplicateIfStatements'], + 'htdocs/projet/activity/index.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/projet/class/projectstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/projet/class/taskstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/projet/list.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/projet/tasks/list.php' => ['PhanTypeArraySuspiciousNull'], + 'htdocs/projet/tasks/time.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/public/bookcal/booking.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/public/bookcal/index.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/public/error-401.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/public/eventorganization/attendee_new.php' => ['PhanParamTooMany'], + 'htdocs/public/partnership/new.php' => ['PhanUndeclaredVariable'], + 'htdocs/public/payment/newpayment.php' => ['PhanUndeclaredClassCatch'], + 'htdocs/public/project/suggestbooth.php' => ['PhanParamTooMany'], + 'htdocs/public/project/suggestconference.php' => ['PhanParamTooMany'], + 'htdocs/public/test/test_forms.php' => ['PhanPluginWhitespaceTrailing'], + 'htdocs/reception/class/receptionstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/reception/list.php' => ['PhanNoopArrayAccess'], + 'htdocs/recruitment/core/modules/recruitment/mod_recruitmentcandidature_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/recruitment/core/modules/recruitment/mod_recruitmentjobposition_standard.php' => ['PhanDeprecatedFunctionInternal'], + 'htdocs/salaries/card.php' => ['PhanDeprecatedFunctionInternal', 'PhanUndeclaredConstantOfClass'], + 'htdocs/salaries/class/paymentsalary.class.php' => ['PhanTypeInvalidUnaryOperandNumeric'], + 'htdocs/salaries/class/salariesstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/salaries/document.php' => ['PhanUndeclaredConstantOfClass'], + 'htdocs/salaries/info.php' => ['PhanUndeclaredConstantOfClass'], + 'htdocs/societe/canvas/actions_card_common.class.php' => ['PhanParamTooMany'], + 'htdocs/societe/card.php' => ['PhanParamTooMany'], + 'htdocs/societe/class/companybankaccount.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/societe/consumption.php' => ['PhanParamTooMany'], + 'htdocs/stripe/class/stripe.class.php' => ['PhanUndeclaredClassCatch'], + 'htdocs/takepos/invoice.php' => ['PhanPluginDuplicateExpressionAssignment'], + 'htdocs/ticket/class/ticket.class.php' => ['PhanUndeclaredVariable'], + 'htdocs/ticket/class/ticketstats.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/ticket/list.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/user/class/user.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/user/class/usergroup.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/user/list.php' => ['PhanPluginDuplicateIfStatements'], + 'htdocs/variants/class/ProductAttribute.class.php' => ['PhanParamSignatureMismatch'], + 'htdocs/variants/tpl/productattributevalueline_create.tpl.php' => ['PhanUndeclaredThis'], + 'htdocs/variants/tpl/productattributevalueline_view.tpl.php' => ['PhanUndeclaredThis'], + ], + // 'directory_suppressions' => ['src/directory_name' => ['PhanIssueName1', 'PhanIssueName2']] can be manually added if needed. + // (directory_suppressions will currently be ignored by subsequent calls to --save-baseline, but may be preserved in future Phan releases) +]; diff --git a/.phan/config.php b/.phan/config.php new file mode 100644 index 0000000000000..06db56d552490 --- /dev/null +++ b/.phan/config.php @@ -0,0 +1,365 @@ + 6, + 'backward_compatibility_checks' => false, + 'simplify_ast'=>true, + 'analyzed_file_extensions' => ['php','inc'], + + // Supported values: `'5.6'`, `'7.0'`, `'7.1'`, `'7.2'`, `'7.3'`, `'7.4'`, `null`. + // If this is set to `null`, + // then Phan assumes the PHP version which is closest to the minor version + // of the php executable used to execute Phan. + //"target_php_version" => null, + "target_php_version" => '8.2', + //"target_php_version" => '7.3', + //"target_php_version" => '5.6', + + // A list of directories that should be parsed for class and + // method information. After excluding the directories + // defined in exclude_analysis_directory_list, the remaining + // files will be statically analyzed for errors. + // + // Thus, both first-party and third-party code being used by + // your application should be included in this list. + 'directory_list' => [ + 'htdocs', + ], + + // A directory list that defines files that will be excluded + // from static analysis, but whose class and method + // information should be included. + // + // Generally, you'll want to include the directories for + // third-party code (such as "vendor/") in this list. + // + // n.b.: If you'd like to parse but not analyze 3rd + // party code, directories containing that code + // should be added to the `directory_list` as + // to `exclude_analysis_directory_list`. + "exclude_analysis_directory_list" => [ + '.', + 'htdocs/includes/', + 'htdocs/core/class/lessc.class.php', // External library + ], + //'exclude_file_regex' => '@^vendor/.*/(tests?|Tests?)/@', + 'exclude_file_regex' => '@^(' + .'dummy' + .'|htdocs/.*/class/api_.*' + .'|htdocs/.*/canvas/.*/tpl/.*.tpl.php' + .'|htdocs/modulebuilder/template/.*' + .')@', + + + + // A list of plugin files to execute. + // Plugins which are bundled with Phan can be added here by providing their name + // (e.g. 'AlwaysReturnPlugin') + // + // Documentation about available bundled plugins can be found + // at https://github.com/phan/phan/tree/master/.phan/plugins + // + // Alternately, you can pass in the full path to a PHP file + // with the plugin's implementation (e.g. 'vendor/phan/phan/.phan/plugins/AlwaysReturnPlugin.php') + 'plugins' => [ + // checks if a function, closure or method unconditionally returns. + // can also be written as 'vendor/phan/phan/.phan/plugins/AlwaysReturnPlugin.php' + //'DeprecateAliasPlugin', + //'EmptyMethodAndFunctionPlugin', + 'InvalidVariableIssetPlugin', + //'MoreSpecificElementTypePlugin', + 'NoAssertPlugin', + 'NotFullyQualifiedUsagePlugin', + //'PHPDocRedundantPlugin', + 'PHPUnitNotDeadCodePlugin', + //'PossiblyStaticMethodPlugin', + 'PreferNamespaceUsePlugin', + 'PrintfCheckerPlugin', + 'RedundantAssignmentPlugin', + + 'ConstantVariablePlugin', // Warns about values that are actually constant + //'HasPHPDocPlugin', // Requires PHPDoc + 'InlineHTMLPlugin', // html in PHP file, or at end of file + //'NonBoolBranchPlugin', // Requires test on bool, nont on ints + //'NonBoolInLogicalArithPlugin', + 'NumericalComparisonPlugin', + //'PHPDocToRealTypesPlugin', + 'PHPDocInWrongCommentPlugin', // Missing /** (/* was used) + //'ShortArrayPlugin', // Checks that [] is used + //'StrictLiteralComparisonPlugin', + 'UnknownClassElementAccessPlugin', + 'UnknownElementTypePlugin', + 'WhitespacePlugin', + //'RemoveDebugStatementPlugin', // Reports echo, print, ... + //'SimplifyExpressionPlugin', + //'StrictComparisonPlugin', // Expects === + //'SuspiciousParamOrderPlugin', + 'UnsafeCodePlugin', + //'UnusedSuppressionPlugin', + + 'AlwaysReturnPlugin', + //'DollarDollarPlugin', + 'DuplicateArrayKeyPlugin', + 'DuplicateExpressionPlugin', + 'PregRegexCheckerPlugin', + 'PrintfCheckerPlugin', + 'SleepCheckerPlugin', + // Checks for syntactically unreachable statements in + // the global scope or function bodies. + 'UnreachableCodePlugin', + 'UseReturnValuePlugin', + 'EmptyStatementListPlugin', + 'LoopVariableReusePlugin', + ], + + // Add any issue types (such as 'PhanUndeclaredMethod') + // here to inhibit them from being reported + 'suppress_issue_types' => [ + // Dolibarr uses a lot of internal deprecated stuff, not reporting + 'PhanDeprecatedProperty', + 'PhanDeprecatedFunction', + // Nulls are likely mostly false positives + 'PhanPluginConstantVariableNull', + 'PhanTypeObjectUnsetDeclaredProperty', + 'PhanPluginComparisonNotStrictForScalar', + 'PhanPluginNonBoolBranch', + 'PhanPluginShortArray', + 'PhanPluginNumericalComparison', + 'PhanPluginUnknownObjectMethodCall', + 'PhanPluginCanUseParamType', + 'PhanPluginNonBoolInLogicalArith', + 'PhanPluginCanUseReturnType', + 'PhanPluginNotFullyQualifiedFunctionCall', + 'PhanPluginConstantVariableScalar', + 'PhanPluginNoCommentOnPublicProperty', + 'PhanPluginUnknownPropertyType', + 'PhanPluginUnknownMethodParamType', + 'PhanPluginNotFullyQualifiedOptimizableFunctionCall', + 'PhanPluginUnknownMethodReturnType', + 'PhanPluginUnknownArrayMethodParamType', + 'PhanPluginWhitespaceTab', + 'PhanPluginCanUsePHP71Void', + 'PhanPluginUnknownArrayMethodReturnType', + 'PhanTypeMismatchArgumentInternal', + 'PhanPluginDuplicateAdjacentStatement', + 'PhanPluginCanUseNullableParamType', + 'PhanTypeInvalidLeftOperandOfNumericOp', + 'PhanTypeMismatchProperty', + 'PhanPluginNoCommentOnPublicMethod', + 'PhanRedefinedClassReference', + 'PhanPluginNoCommentOnClass', + 'PhanPluginNotFullyQualifiedGlobalConstant', + 'PhanTypeMismatchDefault', + 'PhanPluginPHPDocHashComment', + 'PhanPluginShortArrayList', + 'PhanPluginUnknownArrayPropertyType', + 'PhanTypeInvalidDimOffset', + 'PhanPluginNoCommentOnProtectedProperty', + 'PhanPluginDescriptionlessCommentOnPublicMethod', + 'PhanPluginUnknownClosureParamType', + 'PhanPluginUnknownClosureReturnType', + 'PhanPluginNoCommentOnProtectedMethod', + 'PhanTypeArraySuspicious', + 'PhanTypeMismatchPropertyProbablyReal', + 'PhanPluginNoCommentOnPrivateMethod', + 'PhanPluginUnknownArrayFunctionReturnType', + 'PhanTypeInvalidLeftOperandOfAdd', + 'PhanPluginNoCommentOnPrivateProperty', + 'PhanPluginNoCommentOnFunction', + 'PhanPluginCanUseNullableReturnType', + 'PhanPluginUnknownArrayFunctionParamType', + 'PhanPluginDescriptionlessCommentOnPublicProperty', + 'PhanPluginUnknownFunctionParamType', + 'PhanTypeSuspiciousStringExpression', + 'PhanPluginRedundantAssignment', + 'PhanTypeExpectedObjectPropAccess', + 'PhanTypeInvalidRightOperandOfNumericOp', + 'PhanPluginInlineHTML', + 'PhanPluginUnknownFunctionReturnType', + 'PhanPluginDescriptionlessCommentOnProtectedProperty', + 'PhanPluginRedundantAssignmentInGlobalScope', + 'PhanTypeMismatchDeclaredParamNullable', + 'PhanTypeInvalidRightOperandOfAdd', + 'PhanPluginDescriptionlessCommentOnPrivateProperty', + 'PhanUndeclaredVariableDim', // Array initialisation on undeclared var: $abc['x']='ab' + 'PhanTypeInvalidPropertyName', + 'PhanPluginDuplicateCatchStatementBody', + 'PhanPluginUndeclaredVariableIsset', + 'PhanTypeInvalidUnaryOperandIncOrDec', + 'PhanPluginDescriptionlessCommentOnClass', + 'PhanPluginEmptyStatementIf', + 'PhanPluginInlineHTMLTrailing', + 'PhanUndeclaredStaticMethod', + 'PhanPluginDescriptionlessCommentOnPrivateMethod', + 'PhanPluginPrintfIncompatibleArgumentType', + 'PhanPossiblyNullTypeMismatchProperty', + 'PhanRedefineClass', + 'PhanRedefineFunction', + 'PhanTypeInvalidLeftOperandOfBitwiseOp', + 'PhanTypeMismatchDimAssignment', + 'PhanPluginDescriptionlessCommentOnProtectedMethod', + 'PhanPluginPrintfIncompatibleArgumentTypeWeak', + 'PhanUndeclaredVariableAssignOp', + 'PhanTypeExpectedObjectOrClassName', + 'PhanEmptyFQSENInClasslike', + 'PhanTypeMismatchArgumentInternalReal', + 'PhanUnextractableAnnotationElementName', + 'PhanCommentParamWithoutRealParam', + 'PhanRedefinedExtendedClass', + 'PhanTypeComparisonFromArray', + 'PhanPluginConstantVariableBool', + 'PhanPluginPrintfVariableFormatString', + 'PhanTypeMismatchDimFetch', + 'PhanTypeMismatchDimFetchNullable', + 'PhanTypeSuspiciousNonTraversableForeach', + 'PhanEmptyForeach', + 'PhanTypeInvalidRightOperandOfBitwiseOp', + 'PhanPluginDuplicateConditionalUnnecessary', + 'PhanTraitParentReference', + 'PhanPluginBothLiteralsBinaryOp', + 'PhanTypeMismatchDeclaredParam', + 'PhanCommentDuplicateMagicMethod', + 'PhanParamSpecial1', + 'PhanPluginInlineHTMLLeading', + 'PhanPluginUseReturnValueInternalKnown', + 'PhanRedefinedInheritedInterface', + 'PhanTypeComparisonToArray', + 'PhanTypeConversionFromArray', + 'PhanTypeInvalidLeftOperandOfIntegerOp', + 'PhanTypeMismatchArgumentInternalProbablyReal', + 'PhanTypeMismatchBitwiseBinaryOperands', + 'PhanTypeMismatchDimEmpty', + 'PhanTypeSuspiciousEcho', + 'PhanNoopBinaryOperator', + 'PhanTypeInvalidBitwiseBinaryOperator', + 'PhanPluginDescriptionlessCommentOnFunction', + 'PhanPluginPHPDocInWrongComment', + 'PhanRedefineClassInternal', + 'PhanTypeInvalidThrowsIsInterface', + 'PhanPluginRedundantAssignmentInLoop', + 'PhanInvalidCommentForDeclarationType', + 'PhanParamSignatureMismatchInternal', + 'PhanPluginEmptyStatementForeachLoop', + 'PhanCompatibleDimAlternativeSyntax', + 'PhanInvalidFQSENInClasslike', + 'PhanMismatchVariadicComment', + 'PhanNoopConstant', + 'PhanPluginUnknownArrayClosureParamType', + 'PhanTypeInstantiateAbstractStatic', + 'PhanEmptyForeachBody', + 'PhanPluginEmptyStatementWhileLoop', + 'PhanSyntaxReturnValueInVoid', + 'PhanTypeInstantiateTraitStaticOrSelf', + 'PhanUndeclaredInvokeInCallable', + 'PhanNoopProperty', + 'PhanNoopVariable', + 'PhanPluginPrintfUnusedArgument', + 'PhanSyntaxReturnExpectedValue', + 'PhanAccessClassInternal', + 'PhanCompatibleAccessMethodOnTraitDefinition', + 'PhanNoopSwitchCases', + 'PhanNoopTernary', + 'PhanNoopUnaryOperator', + 'PhanParamNameIndicatingUnusedInClosure', + 'PhanParamSignatureRealMismatchTooFewParametersInternal', + 'PhanPluginEmptyStatementSwitch', + 'PhanPossiblyUnsetPropertyOfThis', + 'PhanTypeInvalidLeftOperand', + 'PhanTypeInvalidRightOperand', + 'PhanTypeInvalidRightOperandOfIntegerOp', + 'PhanTypeMismatchArgumentReal', + 'PhanTypeMismatchDeclaredReturnNullable', + + //'PhanUndeclaredThis', + 'PhanPluginMixedKeyNoKey', + 'PhanPluginDuplicateConditionalNullCoalescing', // Suggests to optimize to ?? + //'PhanUnreferencedClosure', // False positives seen with closures in arrays, TODO: move closure checks closer to what is done by unused variable plugin + //'PhanPluginNoCommentOnProtectedMethod', + //'PhanPluginDescriptionlessCommentOnProtectedMethod', + //'PhanPluginNoCommentOnPrivateMethod', + //'PhanPluginDescriptionlessCommentOnPrivateMethod', + //'PhanPluginDescriptionlessCommentOnPrivateProperty', + // TODO: Fix edge cases in --automatic-fix for PhanPluginRedundantClosureComment + //'PhanPluginRedundantClosureComment', + 'PhanPluginPossiblyStaticPublicMethod', + //'PhanPluginPossiblyStaticProtectedMethod', + + // The types of ast\Node->children are all possibly unset. + 'PhanTypePossiblyInvalidDimOffset', // Also checks optional array keys and requires that they are checked for existence. + 'PhanUndeclaredGlobalVariable', + 'PhanUndeclaredProperty', + 'PhanPluginPrintfNotPercent', + 'PhanPossiblyUndeclaredGlobalVariable', + 'PhanPluginPossiblyStaticProtectedMethod', + 'PhanTypeMismatchReturn', + 'PhanPluginMoreSpecificActualReturnType', + 'PhanTypeMismatchReturnProbablyReal', + 'PhanPossiblyUndeclaredVariable', + 'PhanTypeMismatchArgument', + //'PhanPluginUnreachableCode', + //'PhanTypeMismatchArgumentInternal', + //'PhanPluginAlwaysReturnMethod', + 'PhanUndeclaredClassMethod', + 'PhanUndeclaredMethod', + 'PhanTypeMismatchArgumentProbablyReal', + 'PhanPluginDuplicateExpressionAssignmentOperation', + 'PhanTypeMismatchPropertyDefault', + 'PhanPluginAlwaysReturnMethod', + 'PhanPluginMissingReturnMethod', + 'PhanUndeclaredTypeReturnType', + 'PhanUndeclaredClassProperty', + 'PhanTypeArraySuspiciousNullable', + 'PhanPluginInconsistentReturnMethod', + 'PhanTypeExpectedObjectPropAccessButGotNull', + 'PhanUndeclaredClassAttribute', + 'PhanNonClassMethodCall', + 'PhanPluginNoAssert', + 'PhanTypeMismatchReturnSuperType', + 'PhanTypeMismatchArgumentSuperType', + 'PhanPluginDuplicateConditionalTernaryDuplication', + ], + // You can put relative paths to internal stubs in this config option. + // Phan will continue using its detailed type annotations, + // but load the constants, classes, functions, and classes (and their Reflection types) + // from these stub files (doubling as valid php files). + // Use a different extension from php (and preferably a separate folder) + // to avoid accidentally parsing these as PHP (includes projects depending on this). + // The 'mkstubs' script can be used to generate your own stubs (compatible with php 7.0+ right now) + // Note: The array key must be the same as the extension name reported by `php -m`, + // so that phan can skip loading the stubs if the extension is actually available. + 'autoload_internal_extension_signatures' => [ + // Xdebug stubs are bundled with Phan 0.10.1+/0.8.9+ for usage, + // because Phan disables xdebug by default. + //'xdebug' => 'vendor/phan/phan/.phan/internal_stubs/xdebug.phan_php', + //'memcached' => '.phan/your_internal_stubs_folder_name/memcached.phan_php', + 'PDO' => '.phan/stubs/PDO.phan_php', + 'brotli' => '.phan/stubs/brotli.phan_php', + 'curl' => '.phan/stubs/curl.phan_php', + 'calendar' => '.phan/stubs/calendar.phan_php', + 'fileinfo' => '.phan/stubs/fileinfo.phan_php', + 'ftp' => '.phan/stubs/ftp.phan_php', + 'gd' => '.phan/stubs/gd.phan_php', + 'imap' => '.phan/stubs/imap.phan_php', + 'intl' => '.phan/stubs/intl.phan_php', + 'ldap' => '.phan/stubs/ldap.phan_php', + 'mcrypt' => '.phan/stubs/mcrypt.phan_php', + 'memcache' => '.phan/stubs/memcache.phan_php', + 'mysqli' => '.phan/stubs/mysqli.phan_php', + 'pdo_cubrid' => '.phan/stubs/pdo_cubrid.phan_php', + 'pdo_mysql' => '.phan/stubs/pdo_mysql.phan_php', + 'pdo_pgsql' => '.phan/stubs/pdo_pgsql.phan_php', + 'pdo_sqlite' => '.phan/stubs/pdo_sqlite.phan_php', + 'pgsql' => '.phan/stubs/pgsql.phan_php', + 'session' => '.phan/stubs/session.phan_php', + 'simplexml' => '.phan/stubs/SimpleXML.phan_php', + 'soap' => '.phan/stubs/soap.phan_php', + 'sockets' => '.phan/stubs/sockets.phan_php', + 'zip' => '.phan/stubs/zip.phan_php', + ], + +]; diff --git a/.phan/stubs/Core.phan_php b/.phan/stubs/Core.phan_php new file mode 100644 index 0000000000000..d2f722d1762e5 --- /dev/null +++ b/.phan/stubs/Core.phan_php @@ -0,0 +1,333 @@ +