diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2d020be14afe4..1b85fc0fc7cc7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,7 +3,6 @@ name: "CI" on: [push, pull_request] jobs: pre-commit: - if: false uses: ./.github/workflows/pre-commit.yml secrets: inherit with: diff --git a/.github/workflows/gh-travis.yml b/.github/workflows/gh-travis.yml new file mode 100644 index 0000000000000..30c10765f079b --- /dev/null +++ b/.github/workflows/gh-travis.yml @@ -0,0 +1,49 @@ +--- +# This runs a travis script inside a github runner +name: Travis +# Controls when the workflow will run +on: + # push: + # pull_request: + workflow_call: + inputs: + gh_event: + required: true + type: string + workflow_dispatch: + +concurrency: + group: travis-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref + }} + cancel-in-progress: true +env: + gh_event: ${{ inputs.gh_event || github.event_name }} + GITHUB_JSON: ${{ toJSON(github) }} # Helps in debugging Github Action +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job + gh-travis: + # The type of runner that the job will run on + runs-on: ubuntu-latest + strategy: + fail-fast: false + # matrix: + # php-version: + # # PHPStan requires PHP >= 7.2. + # #- "7.2" + # - "8.2" + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - name: Checkout travis file + uses: actions/checkout@v4 + - name: Run .travis.yml build script + uses: ktomk/run-travis-yml@v1 + with: + # run-job: travis # name of a job in travis file + allow-failure: false + # file: .travis.yml + # steps: | # Default: setup, before_install, install, before_script, script, after_script, before_deploy + # install + # script + # env: + # TRAVIS_PHP_VERSION: ${{ matrix.php-version }} diff --git a/.github/workflows/phan.yaml b/.github/workflows/phan.yaml deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/.github/workflows/phan.yml b/.github/workflows/phan.yml new file mode 100644 index 0000000000000..56a33ef76c7e8 --- /dev/null +++ b/.github/workflows/phan.yml @@ -0,0 +1,58 @@ +--- +on: + # pull_request: + # push: + # schedule: + # # execute once a day, the 1st + # - cron: 10 9 * * * + workflow_call: + inputs: + gh_event: + required: true + type: string + workflow_dispatch: + +concurrency: + group: phan-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +env: + gh_event: ${{ inputs.gh_event || github.event_name }} + PHAN_CONFIG: > + ${{ 'dev/tools/phan/config.php' }} + PHAN_BASELINE: dev/tools/phan/baseline.txt + PHAN_MIN_PHP: 7.0 + PHAN_QUICK: ${{ github.event.schedule && '' || '--quick' }} + GITHUB_JSON: ${{ toJSON(github) }} # Helps in debugging Github Action + +name: phan +jobs: + phan: + name: Run phan + runs-on: ubuntu-latest + # Do not run schedule on forks + if: | + github.repository == 'Dolibarr/dolibarr' + || github.event.schedule == false + steps: + - uses: actions/checkout@v4 + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.2 + coverage: none # disable xdebug, pcov + tools: cs2pr,phan + - name: Run Phan analysis + run: | + phan $PHAN_QUICK -k $PHAN_CONFIG -B $PHAN_BASELINE --analyze-twice --minimum-target-php-version $PHAN_MIN_PHP --output-mode=checkstyle -o _phan.xml + - name: Add results to PR + if: ${{ always() }} + run: | + cs2pr --prepend-filename --prepend-source --notices-as-warnings _phan.xml + - name: Provide phan log as artifact + uses: actions/upload-artifact@v4 + if: ${{ always() }} + with: + name: phan-srcrt + # path: ${{ github.workspace }}/phan.log + path: ${{ github.workspace }}/_phan.xml + retention-days: 2 diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml new file mode 100644 index 0000000000000..c638ee83e500a --- /dev/null +++ b/.github/workflows/phpstan.yml @@ -0,0 +1,88 @@ +--- +# This is a basic workflow to check code with PHPSTAN tool +name: PHPStan +# Controls when the workflow will run +on: + # push: + # pull_request: + workflow_call: + inputs: + gh_event: + required: true + type: string + workflow_dispatch: + +concurrency: + group: stan-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref + }} + cancel-in-progress: true +env: + gh_event: ${{ inputs.gh_event || github.event_name }} + CACHE_KEY_PART: ${{ ( inputs.gh_event == 'pull_request' || github.event_name == 'pull_request' ) && format('{0}-{1}', github.base_ref, github.head_ref) || github.ref_name }} + GITHUB_JSON: ${{ toJSON(github) }} # Helps in debugging Github Action +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job + php-stan: + # The type of runner that the job will run on + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-version: + # PHPStan requires PHP >= 7.2. + #- "7.2" + - '8.2' + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v4 + + # Get PHP and addons + - name: Setup PHP + id: setup-php + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + tools: phpstan, cs2pr + extensions: calendar, json, imagick, gd, zip, mbstring, intl, opcache, imap, + mysql, pgsql, sqlite3, ldap, xml, mcrypt + + # Restore old cache + - name: Restore phpstan cache + id: cache + uses: actions/cache/restore@v4 + with: + path: ./.github/tmp + key: phpstan-cache-${{ matrix.php-version }}-${{ env.CACHE_KEY_PART }}-${{ + github.run_id }} + restore-keys: | + phpstan-cache-${{ matrix.php-version }}-${{ env.CACHE_KEY_PART }}- + phpstan-cache-${{ matrix.php-version }}-${{ github.head_ref }}- + phpstan-cache-${{ matrix.php-version }}-${{ github.base_ref }}- + phpstan-cache-${{ matrix.php-version }}- + - name: Show debug into + run: cd ./.github/tmp && ls -al + + # Run PHPStan + - name: Run PHPStan + id: phpstan + run: | + phpstan -vvv analyse --error-format=checkstyle --memory-limit 7G -a build/phpstan/bootstrap_action.php | tee _stan.xml | cs2pr --graceful-warnings + # continue-on-error: true + + # Save cache + - name: Save phpstan cache + uses: actions/cache/save@v4 + if: ${{ success() || ( ! cancelled() && steps.cache.outputs.cache-hit != 'true' ) }} + with: + path: ./.github/tmp + key: phpstan-cache-${{ matrix.php-version }}-${{ env.CACHE_KEY_PART }}-${{ + github.run_id }} + - name: Provide phpstan log as artifact + uses: actions/upload-artifact@v4 + if: ${{ always() }} + with: + name: phpstan-srcrt + path: ${{ github.workspace }}/_stan.xml + retention-days: 2 diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 1ae4d3387f8fe..dfbaa7a84ab8e 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -1,8 +1,21 @@ --- name: pre-commit on: - pull_request: - push: + # pull_request: + # push: + workflow_call: + inputs: + gh_event: + required: true + type: string + workflow_dispatch: + +concurrency: + group: pre-commit-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref + }} + cancel-in-progress: true +env: + gh_event: ${{ inputs.gh_event || github.event_name }} jobs: pre-commit: runs-on: ubuntu-latest @@ -15,11 +28,12 @@ jobs: if: false # The next uses the git API because there is no clone yet. + # It sets the variable steps.changed-php.outputs.all_changed_files for other steps # This is faster for a big repo. - name: Get all changed php files (if PR) id: changed-php - uses: tj-actions/changed-files@v42 - if: github.event_name == 'pull_request' + uses: tj-actions/changed-files@v44 + if: env.gh_event == 'pull_request' with: files: | **.php @@ -37,12 +51,14 @@ jobs: cache: pip python-version: "3.11" - run: python -m pip install pre-commit + # Restore previous cache of precommit - uses: actions/cache/restore@v4 with: path: ~/.cache/pre-commit/ key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }} - # Run all the precommit tools (defined into pre-commit-config.yaml). + + # Run all the precommit tools (defined in pre-commit-config.yaml). # We can force exclusion of some of them here. - name: Run pre-commit hooks env: @@ -56,8 +72,8 @@ jobs: # The next uses git, which is slow for a bit repo. # - name: Get all changed php files (if PR) # id: changed-php - # uses: tj-actions/changed-files@v42 - # if: github.event_name == 'pull_request' + # uses: tj-actions/changed-files@v44 + # if: env.gh_event == 'pull_request' # with: # files: | # **.php @@ -66,13 +82,16 @@ jobs: uses: shivammathur/setup-php@v2 # Install when we're going to run phpcs if: | - steps.changed-php.outputs.any_changed == 'true' - || + ! cancelled() && ( - github.event_name == 'push' - && ( - github.event.ref == 'refs/heads/develop' - || endsWith(github.event.ref, '.0') + steps.changed-php.outputs.any_changed == 'true' + || + ( + env.gh_event == 'push' + && ( + github.event.ref == 'refs/heads/develop' + || endsWith(github.event.ref, '.0') + ) ) ) with: @@ -81,7 +100,7 @@ jobs: tools: phpcs - name: Run some pre-commit hooks on selected changed files only - if: steps.changed-php.outputs.any_changed == 'true' + if: "! cancelled() && steps.changed-php.outputs.any_changed == 'true'" env: ALL_CHANGED_FILES: ${{ steps.changed-php.outputs.all_changed_files }} run: | @@ -90,7 +109,7 @@ jobs: - name: Run some pre-commit hooks on all files on push to "main" branches if: | - github.event_name == 'push' + env.gh_event == 'push' && ( github.event.ref == 'refs/heads/develop' || endsWith(github.event.ref, '.0') @@ -99,10 +118,11 @@ jobs: set -o pipefail ln -sf ~/.cache .cache # Absolute path in .pre-commit-config.yaml pre-commit run --hook-stage manual -a php-cs-with-cache | tee -a ${RAW_LOG} + # pre-commit run --hook-stage manual -a sqlfluff-lint | tee -a ${RAW_LOG} ls -l ~/.cache/pre-commit/ - name: Convert Raw Log to Annotations - uses: mdeweerd/logToCheckStyle@v2024.2.9 + uses: mdeweerd/logToCheckStyle@v2024.3.5 if: ${{ failure() }} with: in: ${{ env.RAW_LOG }} @@ -122,4 +142,4 @@ jobs: path: | ${{ env.RAW_LOG }} ${{ env.CS_XML }} - retention-days: 2 + retention-days: 2 diff --git a/.github/workflows/windows-ci.yml b/.github/workflows/windows-ci.yml new file mode 100644 index 0000000000000..7f55003741613 --- /dev/null +++ b/.github/workflows/windows-ci.yml @@ -0,0 +1,186 @@ +--- +name: Win CI +# yamllint disable-line rule:truthy +on: + # push: + # pull_request: + workflow_call: + inputs: + gh_event: + required: true + type: string + workflow_dispatch: + +concurrency: + group: win-ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref + }} + cancel-in-progress: true +env: + gh_event: ${{ inputs.gh_event || github.event_name }} + PHPUNIT_LOG: phpunit_tests.log + DOLIBARR_LOG: documents/dolibarr.log + PHPSERVER_LOG: phpserver.log + PHPSERVER_DOMAIN_PORT: 127.0.0.1:8000 # could be 127.0.0.1:8000 if config modified + CACHE_KEY_PART: ${{ ( inputs.gh_event == 'pull_request' || github.event_name == 'pull_request' ) && format('{0}-{1}', github.base_ref, github.head_ref) || github.ref_name }} + PHP_INI_SCAN_DIR: C:\myphpini + CKEY: win-ci-2 + GITHUB_JSON: ${{ toJSON(github) }} # Helps in debugging Github Action +jobs: + win-test: + strategy: + matrix: + os: [windows-latest] + # php_version: [7.4, 8.0] # Add more versions if needed + php_version: [7.4] # Add more versions if needed + runs-on: ${{ matrix.os }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Setup MariaDB + uses: ankane/setup-mariadb@v1 + with: + # mariadb-version: ${{ matrix.mariadb-version }} + database: travis # Specify your database name + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php_version }} + # ini-values: post_max_size=256M, max_execution_time=180 + extensions: > + calendar, gd, imagick, imap, intl, json, ldap, mbstring, + mcrypt, mysql, mysqli, opcache, pgsql, sqlite3, xml, zip + tools: > + composer, + phpunit:9.5 + coverage: none + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # phpts: ts # ts for thread-safe, default nts + + # Restore cache + - name: Restore cache + id: cache + uses: actions/cache/restore@v4 + with: + # See https://github.com/actions/cache/issues/1275#issuecomment-1925217178 + enableCrossOsArchive: true + path: | + db_init.sql + db_init.sql.md5 + key: ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ env.CACHE_KEY_PART + }}-${{ github.run_id }} + restore-keys: | + ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ env.CACHE_KEY_PART }}- + ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ github.head_ref }}- + ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}-${{ github.base_ref }}- + ${{ matrix.os }}-${{ env.ckey }}-${{ matrix.php_version }}- + + - name: Create local php.ini with open_basedir restrictions + shell: cmd + # Objective: separate step, and before database initialisation to verify open_basedir restrictions + run: |- + echo "BASEDIR=%CD%" >> %GITHUB_ENV% + ECHO "==== Show INI file usage before our configuration ===" + php --ini + ECHO "==== Set PHP_INI_SCAN_DIR to include the INI File we create ===" + mkdir %PHP_INI_SCAN_DIR% + SET INIFILE="%PHP_INI_SCAN_DIR%\dolibarr.ini" + SET HTDOCS_DIR=%CD%\htdocs + SET DATA_DIR=%CD%\documents + SET TEST_DIR=%CD%\test + SET INITDEMO_DIR=%CD%\dev\initdemo + ECHO "==== Create INI file to set open_basedir ===" + echo [php] > %INIFILE% + echo open_basedir^="%HTDOCS_DIR%;%DATA_DIR%;%TEST_DIR%;%INITDEMO_DIR%;%PHPROOT%" >> %INIFILE% + REM Unset PHP_INI_SCAN_DIR to disable open_basedir restritions (to limit debug effort) + REM SET PHP_INI_SCAN_DIR= + ECHO "==== Show contents of INI file to set open_basedir ===" + type %INIFILE% + ECHO "==== Verify it is used by PHP ===" + php --ini + REM TEST OPEN_BASEDIR restriction is not limiting wrongly + REM THE DATA_DIR MUST BE CREATED HERE - open_base does not allow it's creation + mkdir "%DATA_DIR%" + mkdir "%DATA_DIR%\mytest" + php -r "$d=implode(DIRECTORY_SEPARATOR,[__DIR__,'documents','mytest']);echo 'IS_DIR '.$d.' '.((int) is_dir($d)).PHP_EOL;" + php -r "$d=__DIR__.'\documents/mytest';echo 'TEST PATH IS SHOWN: '.$d.PHP_EOL;" + php -r "$d=__DIR__.'\documents/mytest';echo 'IS_DIR '.$d.' '.((int) is_dir($d)).PHP_EOL;" + ECHO "The above should show 2 successful tests" + + - name: Run Bash script that Initialises the database + # Note this is bash (MSYS) on Windows + shell: bash + run: | + ECHO "#[group]Directory contents to verify cache files, ..." + ls -l + ECHO "#[endgroup]" + ECHO "==== Verify openbase_dir restriction" + php --ini + # Run bash script to initialise database + ECHO "==== Start 'setup_conf.sh' to setup database" + ${SHELL} -xv dev/setup/phpunit/setup_conf.sh + ## Updating test configuration to not stop on first failure (to see all errors) - need sed + sed -i -e 's/stopOnFailure="[^"]*"/stopOnFailure="false"/' test/phpunit/phpunittest.xml + ECHO "#[group]Directory contents after database setup to verify cache files, ..." + ls -l + ECHO "#[endgroup]" + # Export some tool paths to reuse the from CMD shell. + echo "TAIL=$(cygpath -w "$(which tail)")" >> "$GITHUB_ENV" + echo "GREP=$(cygpath -w "$(which grep)")" >> "$GITHUB_ENV" + echo "TEE=$(cygpath -w "$(which tee)")" >> "$GITHUB_ENV" + echo "BASEDIR=$(realpath .)" >> "$GITHUB_ENV" + + - name: Run PHPUnit tests + # continue-on-error: true + shell: cmd + # setting up php.ini, starting the php server are currently in this step + run: |- + ECHO "==== Visually verify our dolibarr.INI file usage ===" + php --ini + ECHO "==== Add our web server information to the config file ===" + echo $dolibarr_main_url_root="http://${{ env.PHPSERVER_DOMAIN_PORT }}"; >> htdocs/conf/conf.php + ECHO "#[group]==== Dolibarr config file contents" + cat htdocs/conf/conf.php + ECHO "#[endgroup]" + ECHO "==== START PHP server" + start /B php -S %PHPSERVER_DOMAIN_PORT% -t htdocs >> %PHPSERVER_LOG% 2>&1 + ECHO "#[group]==== Output from curl on PHP server" + curl "http://${{ env.PHPSERVER_DOMAIN_PORT }}" + ECHO "#[endgroup]" + ECHO "==== START PHPUNIT TESTS" + REM 'DOSKEY' USED to recover error code (no pipefile equivalent in windows?) + ( php "%PHPROOT%\phpunit" -d memory_limit=-1 -c %CD%\test\phpunit\phpunittest.xml "test\phpunit\AllTests.php" --exclude-group WindowsWaitingForFix & call doskey /exename=err err=%%^^errorlevel%% ) | "${{ env.TEE }}" "${{ env.PHPUNIT_LOG }}" + echo "" + echo "Ensure that PHPUNIT completed (no early exit from code)" + "${{ env.TAIL }}" -5 "${{ env.PHPUNIT_LOG }}" | "${{ env.GREP }}" -qE "(OK .*[0-9]+ tests.*[0-9]+ assertions|Tests: [0-9]+)" || EXIT /B 1 + echo "PHPUNIT seems to have completed with a test result, reuse the exit code" + for /f "tokens=2 delims==" %%A in ('doskey /m:err') do EXIT /B %%A + + - name: Convert Raw Log to Annotations + uses: mdeweerd/logToCheckStyle@v2024.3.5 + if: ${{ failure() }} + with: + in: ${{ env.PHPUNIT_LOG }} + + - name: Provide dolibarr and phpunit logs as artifact + uses: actions/upload-artifact@v4 + if: ${{ ! cancelled() }} + with: + name: win-ci-logs + path: | + ${{ env.PHPUNIT_LOG }} + ${{ env.DOLIBARR_LOG }} + ${{ env.PHPSERVER_LOG }} + db_init.sql + db_init.sql.md5 + retention-days: 2 + + # Save cache + - name: Save cache + uses: actions/cache/save@v4 + if: ${{ ! cancelled() }} + with: + # See https://github.com/actions/cache/issues/1275#issuecomment-1925217178 + enableCrossOsArchive: true + key: ${{ steps.cache.outputs.cache-primary-key }} + path: db_init.* diff --git a/dev/tools/phan/baseline.txt b/dev/tools/phan/baseline.txt index a238d6a14a584..0db4bc3332f01 100644 --- a/dev/tools/phan/baseline.txt +++ b/dev/tools/phan/baseline.txt @@ -248,7 +248,7 @@ return [ 'htdocs/admin/defaultvalues.php' => ['PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchProperty'], 'htdocs/admin/delais.php' => ['PhanPossiblyUndeclaredGlobalVariable'], 'htdocs/admin/delivery.php' => ['DeprecatedModuleName', 'PhanEmptyFQSENInClasslike', 'PhanPossiblyUndeclaredGlobalVariable', 'PhanTypeExpectedObjectOrClassName', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredVariableDim'], - 'htdocs/admin/dict.php' => ['DeprecatedModuleName', 'PhanPluginSuspiciousParamPosition', 'PhanPluginUnknownArrayFunctionParamType', 'PhanPossiblyUndeclaredGlobalVariable', 'PhanRedefineFunction', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault'], + 'htdocs/admin/dict.php' => ['PhanTypeMismatchDimFetch', 'DeprecatedModuleName', 'PhanPluginSuspiciousParamPosition', 'PhanPluginUnknownArrayFunctionParamType', 'PhanPossiblyUndeclaredGlobalVariable', 'PhanRedefineFunction', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault'], 'htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php' => ['PhanMisspelledAnnotation'], 'htdocs/admin/dolistore/class/dolistore.class.php' => ['PhanPluginUnknownPropertyType', 'PhanTypeMismatchArgumentInternal', 'PhanUndeclaredProperty'], 'htdocs/admin/ecm.php' => ['PhanTypeMismatchArgumentProbablyReal'], @@ -552,7 +552,7 @@ return [ 'htdocs/compta/prelevement/class/rejetprelevement.class.php' => ['PhanPluginUnknownPropertyType', 'PhanTypeMismatchProperty', 'PhanUndeclaredProperty'], 'htdocs/compta/prelevement/create.php' => ['PhanPluginSuspiciousParamPosition', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredProperty'], 'htdocs/compta/prelevement/demandes.php' => ['PhanPossiblyUndeclaredGlobalVariable', 'PhanTypeInvalidLeftOperandOfNumericOp'], - 'htdocs/compta/prelevement/factures.php' => ['PhanPluginSuspiciousParamOrder', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanUndeclaredProperty'], + 'htdocs/compta/prelevement/factures.php' => ['PhanPluginSuspiciousParamOrder', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanUndeclaredProperty', 'PhanUndeclaredVariableAssignOp'], 'htdocs/compta/prelevement/fiche-rejet.php' => ['PhanPluginSuspiciousParamOrder', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanUndeclaredProperty'], 'htdocs/compta/prelevement/fiche-stat.php' => ['PhanTypeInvalidLeftOperandOfNumericOp', 'PhanUndeclaredProperty'], 'htdocs/compta/prelevement/index.php' => ['PhanTypeMismatchArgumentProbablyReal'], @@ -656,7 +656,7 @@ return [ 'htdocs/core/boxes/box_contracts.php' => ['PhanPluginUnknownPropertyType', 'PhanTypeMismatchArgumentProbablyReal'], 'htdocs/core/boxes/box_customers_outstanding_bill_reached.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'htdocs/core/boxes/box_dolibarr_state_board.php' => ['DeprecatedModuleName', 'PhanTypeMismatchArgumentProbablyReal'], - 'htdocs/core/boxes/box_external_rss.php' => ['PhanPluginUnknownPropertyType'], + 'htdocs/core/boxes/box_external_rss.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginUnknownPropertyType'], 'htdocs/core/boxes/box_factures.php' => ['PhanPluginPrintfVariableFormatString', 'PhanPluginUnknownPropertyType', 'PhanTypeMismatchArgumentProbablyReal'], 'htdocs/core/boxes/box_factures_fourn.php' => ['PhanPluginPrintfVariableFormatString', 'PhanPluginUnknownPropertyType', 'PhanTypeMismatchArgumentProbablyReal'], 'htdocs/core/boxes/box_factures_fourn_imp.php' => ['PhanPluginPrintfVariableFormatString', 'PhanPluginUnknownPropertyType', 'PhanTypeMismatchArgumentProbablyReal'], @@ -702,7 +702,7 @@ return [ 'htdocs/core/boxes/box_task.php' => ['PhanPluginUnknownPropertyType'], 'htdocs/core/boxes/box_validated_projects.php' => ['PhanPluginUnknownPropertyType'], 'htdocs/core/boxes/modules_boxes.php' => ['PhanTypeMismatchArgumentInternal', 'PhanTypeSuspiciousStringExpression'], - 'htdocs/core/class/CMailFile.class.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginEmptyStatementIf', 'PhanPluginUnknownPropertyType', 'PhanTypeMismatchDimFetch', 'PhanTypeMismatchReturn', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredMethod', 'PhanUndeclaredVariable'], + 'htdocs/core/class/CMailFile.class.php' => ['PhanTypeMismatchReturnNullable', 'PhanDeprecatedFunctionInternal', 'PhanPluginEmptyStatementIf', 'PhanPluginUnknownPropertyType', 'PhanTypeMismatchDimFetch', 'PhanTypeMismatchReturn', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredMethod', 'PhanUndeclaredVariable'], 'htdocs/core/class/CSMSFile.class.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginUnknownPropertyType', 'PhanTypeMismatchReturn', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredClassMethod', 'PhanUndeclaredClassProperty', 'PhanUndeclaredProperty'], 'htdocs/core/class/antivir.class.php' => ['PhanTypeMismatchArgumentInternal'], 'htdocs/core/class/canvas.class.php' => ['PhanPluginAlwaysReturnMethod', 'PhanPluginUnknownPropertyType', 'PhanUndeclaredProperty'], @@ -749,7 +749,7 @@ return [ 'htdocs/core/class/html.formcompany.class.php' => ['PhanDeprecatedFunctionInternal', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDeclaredParam', 'PhanTypeMismatchDefault', 'PhanUndeclaredProperty'], 'htdocs/core/class/html.formcontract.class.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault'], 'htdocs/core/class/html.formexpensereport.class.php' => ['PhanTypeMismatchDefault'], - 'htdocs/core/class/html.formfile.class.php' => ['PhanPluginConstantVariableNull', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnknownPropertyType', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn', 'PhanUndeclaredProperty', 'PhanUndeclaredStaticMethod'], + 'htdocs/core/class/html.formfile.class.php' => ['PhanTypeSuspiciousStringExpression', 'PhanPluginConstantVariableNull', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnknownPropertyType', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn', 'PhanUndeclaredProperty', 'PhanUndeclaredStaticMethod'], 'htdocs/core/class/html.formintervention.class.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnProbablyReal'], 'htdocs/core/class/html.formmail.class.php' => ['DeprecatedModuleName', 'PhanDeprecatedFunctionInternal', 'PhanNoopArray', 'PhanPluginEmptyStatementIf', 'PhanPluginSuspiciousParamPosition', 'PhanPluginUnknownPropertyType', 'PhanTypeConversionFromArray', 'PhanTypeExpectedObjectPropAccess', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredProperty', 'PhanUndeclaredVariableDim'], 'htdocs/core/class/html.formmailing.class.php' => ['PhanPluginDuplicateExpressionAssignmentOperation'], @@ -771,7 +771,7 @@ return [ 'htdocs/core/class/smtps.class.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginUnknownPropertyType', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchDimAssignment', 'PhanTypeMismatchDimFetch', 'PhanTypeMismatchReturnNullable', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredVariableDim'], 'htdocs/core/class/stats.class.php' => ['PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginUnknownPropertyType', 'PhanPossiblyUndeclaredVariable', 'PhanTypeArraySuspicious', 'PhanTypeMismatchDimFetch', 'PhanTypeMismatchReturnNullable', 'PhanUndeclaredMethod'], 'htdocs/core/class/timespent.class.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginUnknownPropertyType', 'PhanTypeInvalidLeftOperandOfBitwiseOp', 'PhanTypeMismatchProperty', 'PhanTypeMismatchPropertyProbablyReal', 'PhanUndeclaredClassMethod', 'PhanUndeclaredClassProperty', 'PhanUndeclaredProperty'], - 'htdocs/core/class/translate.class.php' => ['PhanPluginPrintfVariableFormatString', 'PhanPluginUnknownPropertyType', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable'], + 'htdocs/core/class/translate.class.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginPrintfVariableFormatString', 'PhanPluginUnknownPropertyType', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable'], 'htdocs/core/class/utils.class.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginConstantVariableNull', 'PhanPluginSuspiciousParamPosition', 'PhanPluginUnknownPropertyType', 'PhanPossiblyUndeclaredVariable', 'PhanTypeInvalidLeftOperandOfAdd', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchProperty', 'PhanTypeMismatchPropertyProbablyReal', 'PhanTypeMismatchReturn', 'PhanUndeclaredProperty'], 'htdocs/core/class/utils_diff.class.php' => ['PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeInvalidRightOperandOfAdd', 'PhanTypeInvalidRightOperandOfNumericOp', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchDefault'], 'htdocs/core/class/validate.class.php' => ['PhanTypeMismatchDefault'], @@ -786,7 +786,7 @@ return [ 'htdocs/core/db/sqlite3.class.php' => ['PhanParamSignatureMismatch', 'PhanParamSpecial1', 'PhanPossiblyUndeclaredVariable', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMagicVoidWithReturn', 'PhanTypeMismatchBitwiseBinaryOperands', 'PhanTypeMismatchDimFetch', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal', 'PhanUndeclaredProperty', 'PhanUndeclaredVariableDim'], 'htdocs/core/extrafieldsinexport.inc.php' => ['PhanTypeMismatchArgumentNullableInternal', 'PhanUndeclaredThis'], 'htdocs/core/extrafieldsinimport.inc.php' => ['PhanTypeMismatchArgumentNullableInternal', 'PhanUndeclaredThis'], - 'htdocs/core/filemanagerdol/connectors/php/connector.lib.php' => ['PhanPluginConstantVariableNull', 'PhanPluginSimplifyExpressionBool', 'PhanPluginSuspiciousParamPosition', 'PhanPluginUnknownArrayFunctionParamType', 'PhanTypeMismatchReturn'], + 'htdocs/core/filemanagerdol/connectors/php/connector.lib.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginConstantVariableNull', 'PhanPluginSimplifyExpressionBool', 'PhanPluginSuspiciousParamPosition', 'PhanPluginUnknownArrayFunctionParamType', 'PhanTypeMismatchReturn'], 'htdocs/core/filemanagerdol/connectors/php/connector.php' => ['PhanPluginConstantVariableNull'], 'htdocs/core/get_info.php' => ['PhanPluginSuspiciousParamPosition', 'PhanPossiblyUndeclaredGlobalVariable', 'PhanUndeclaredVariableAssignOp'], 'htdocs/core/get_menudiv.php' => ['PhanRedefinedClassReference'], @@ -809,8 +809,8 @@ return [ 'htdocs/core/lib/fichinter.lib.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'htdocs/core/lib/files.lib.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginDuplicateExpressionBinaryOp', 'PhanPluginDuplicateIfCondition', 'PhanPluginSimplifyExpressionBool', 'PhanPluginSuspiciousParamOrderInternal', 'PhanPluginUnknownArrayFunctionParamType', 'PhanPossiblyUndeclaredVariable', 'PhanSuspiciousMagicConstant', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal', 'PhanUndeclaredProperty', 'PhanUndeclaredVariableDim'], 'htdocs/core/lib/fourn.lib.php' => ['PhanPluginDuplicateExpressionAssignmentOperation', 'PhanTypeMismatchArgumentProbablyReal'], - 'htdocs/core/lib/ftp.lib.php' => ['PhanPluginDuplicateIfStatements', 'PhanPluginUseReturnValueInternalKnown', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal'], - 'htdocs/core/lib/functions.lib.php' => ['DeprecatedModuleName', 'PhanDeprecatedFunctionInternal', 'PhanNonClassMethodCall', 'PhanParamTooMany', 'PhanPluginAlwaysReturnFunction', 'PhanPluginDuplicateArrayKey', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginDuplicateIfCondition', 'PhanPluginPrintfIncompatibleArgumentType', 'PhanPluginPrintfNoSpecifiers', 'PhanPluginPrintfNotPercent', 'PhanPluginPrintfVariableFormatString', 'PhanPluginSimplifyExpressionBool', 'PhanPluginSuspiciousParamOrderInternal', 'PhanPluginSuspiciousParamPosition', 'PhanPluginSuspiciousParamPositionInternal', 'PhanPluginUnknownArrayFunctionParamType', 'PhanPluginUnknownClosureParamType', 'PhanPluginUnknownClosureReturnType', 'PhanPluginUnsafeEval', 'PhanPossiblyUndeclaredVariable', 'PhanRedefineFunctionInternal', 'PhanTypeArraySuspicious', 'PhanTypeInvalidUnaryOperandIncOrDec', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredMethod', 'PhanUndeclaredProperty', 'UnknownSanitizeType'], + 'htdocs/core/lib/ftp.lib.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginDuplicateIfStatements', 'PhanPluginUseReturnValueInternalKnown', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal'], + 'htdocs/core/lib/functions.lib.php' => ['PhanTypeMismatchDimFetchNullable', 'PhanTypeMismatchDimAssignment', 'PhanTypeMismatchDimAssignment', 'DeprecatedModuleName', 'PhanDeprecatedFunctionInternal', 'PhanNonClassMethodCall', 'PhanParamTooMany', 'PhanPluginAlwaysReturnFunction', 'PhanPluginDuplicateArrayKey', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginDuplicateIfCondition', 'PhanPluginPrintfIncompatibleArgumentType', 'PhanPluginPrintfNoSpecifiers', 'PhanPluginPrintfNotPercent', 'PhanPluginPrintfVariableFormatString', 'PhanPluginSimplifyExpressionBool', 'PhanPluginSuspiciousParamOrderInternal', 'PhanPluginSuspiciousParamPosition', 'PhanPluginSuspiciousParamPositionInternal', 'PhanPluginUnknownArrayFunctionParamType', 'PhanPluginUnknownClosureParamType', 'PhanPluginUnknownClosureReturnType', 'PhanPluginUnsafeEval', 'PhanPossiblyUndeclaredVariable', 'PhanRedefineFunctionInternal', 'PhanTypeArraySuspicious', 'PhanTypeInvalidUnaryOperandIncOrDec', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentInternalReal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturn', 'PhanTypeMismatchReturnNullable', 'PhanTypeMismatchReturnProbablyReal', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredMethod', 'PhanUndeclaredProperty', 'UnknownSanitizeType'], 'htdocs/core/lib/functions2.lib.php' => ['PhanDeprecatedFunctionInternal', 'PhanParamSuspiciousOrder', 'PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPluginSimplifyExpressionBool', 'PhanPluginSuspiciousParamPosition', 'PhanPluginUnknownArrayFunctionParamType', 'PhanPluginUnsafeEval', 'PhanPossiblyUndeclaredVariable', 'PhanTypeInvalidLeftOperandOfAdd', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeInvalidRightOperandOfNumericOp', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchReturnNullable', 'PhanUndeclaredVariableAssignOp'], 'htdocs/core/lib/functions_ch.lib.php' => ['PhanTypeMismatchDimFetch', 'PhanUndeclaredVariableDim'], 'htdocs/core/lib/functionsnumtoword.lib.php' => ['PhanPluginDuplicateExpressionAssignmentOperation', 'PhanPossiblyUndeclaredVariable', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentInternal'], @@ -823,7 +823,7 @@ return [ 'htdocs/core/lib/ldap.lib.php' => ['DeprecatedModuleName', 'PhanPluginUnknownArrayFunctionParamType', 'PhanUndeclaredVariableDim'], 'htdocs/core/lib/loan.lib.php' => ['PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentProbablyReal'], 'htdocs/core/lib/member.lib.php' => ['PhanTypeMismatchArgumentProbablyReal'], - 'htdocs/core/lib/memory.lib.php' => ['PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchDimFetch', 'PhanTypeMismatchReturnProbablyReal'], + 'htdocs/core/lib/memory.lib.php' => ['PhanDeprecatedFunctionInternal', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchDimFetch', 'PhanTypeMismatchReturnProbablyReal'], 'htdocs/core/lib/modulebuilder.lib.php' => ['PhanPluginSuspiciousParamPosition', 'PhanPluginUnknownArrayFunctionParamType', 'PhanPluginUnsafeEval', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchDefault', 'PhanTypeSuspiciousStringExpression'], 'htdocs/core/lib/multicurrency.lib.php' => ['PhanPluginUnknownArrayFunctionParamType'], 'htdocs/core/lib/order.lib.php' => ['DeprecatedModuleName', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeSuspiciousStringExpression', 'PhanUndeclaredVariable'], @@ -1130,7 +1130,7 @@ return [ 'htdocs/don/class/donstats.class.php' => ['PhanParamSignatureMismatch', 'PhanPluginUnknownPropertyType'], 'htdocs/don/class/paymentdonation.class.php' => ['DeprecatedModuleName', 'PhanPluginUnknownPropertyType', 'PhanPossiblyUndeclaredVariable', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchProperty', 'PhanTypeMismatchPropertyProbablyReal'], 'htdocs/don/document.php' => ['PhanPluginEmptyStatementIf', 'PhanPossiblyUndeclaredGlobalVariable', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentProbablyReal'], - 'htdocs/don/index.php' => ['PhanPossiblyUndeclaredGlobalVariable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredVariableDim'], + 'htdocs/don/index.php' => ['PhanDeprecatedFunctionInternal', 'PhanPossiblyUndeclaredGlobalVariable', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredVariableDim'], 'htdocs/don/info.php' => ['PhanPluginEmptyStatementIf', 'PhanPossiblyUndeclaredGlobalVariable'], 'htdocs/don/list.php' => ['PhanDeprecatedFunctionInternal', 'PhanPluginSuspiciousParamOrder', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchProperty', 'PhanTypeSuspiciousStringExpression'], 'htdocs/don/note.php' => ['PhanPluginEmptyStatementIf', 'PhanPossiblyUndeclaredGlobalVariable'], @@ -1348,7 +1348,7 @@ return [ 'htdocs/master.inc.php' => ['PhanRedefineFunctionInternal'], 'htdocs/modulebuilder/admin/setup.php' => ['GetPostUnknownSanitizeType'], 'htdocs/modulebuilder/index.php' => ['PhanNoopBinaryOperator', 'PhanNoopStringLiteral', 'PhanPluginSuspiciousParamPosition', 'PhanPossiblyUndeclaredGlobalVariable', 'PhanTypeInvalidPropertyName', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchArgumentNullableInternal', 'PhanTypeMismatchArgumentProbablyReal'], - 'htdocs/mrp/class/api_mos.class.php' => ['PhanTypeMismatchForeach', 'PhanTypeMismatchReturn', 'PhanTypeSuspiciousStringExpression'], + 'htdocs/mrp/class/api_mos.class.php' => ['PhanCompatibleVoidTypePHP70', 'PhanTypeMismatchForeach', 'PhanTypeMismatchReturn', 'PhanTypeSuspiciousStringExpression'], 'htdocs/mrp/class/mo.class.php' => ['PhanDeprecatedFunctionInternal', 'PhanParamSignatureMismatch', 'PhanPluginSimplifyExpressionBool', 'PhanPluginUnknownPropertyType', 'PhanPossiblyUndeclaredVariable', 'PhanTypeExpectedObjectPropAccessButGotNull', 'PhanTypeInvalidLeftOperandOfBitwiseOp', 'PhanTypeMismatchProperty', 'PhanTypeMismatchPropertyDefault', 'PhanUndeclaredProperty', 'PhanUndeclaredVariable'], 'htdocs/mrp/lib/mrp_mo.lib.php' => ['PhanTypeMismatchArgumentProbablyReal'], 'htdocs/mrp/mo_agenda.php' => ['PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentProbablyReal'], @@ -1580,7 +1580,7 @@ return [ 'htdocs/recruitment/recruitmentjobposition_document.php' => ['PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredProperty'], 'htdocs/recruitment/recruitmentjobposition_list.php' => ['PhanDeprecatedFunctionInternal', 'PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentProbablyReal'], 'htdocs/recruitment/recruitmentjobposition_note.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanUndeclaredProperty'], - 'htdocs/rector.php' => ['PhanUndeclaredClassConstant', 'PhanUndeclaredClassMethod', 'PhanUndeclaredClassReference', 'PhanUndeclaredTypeParameter', 'PhanUnreferencedUseNormal'], + 'htdocs/rector.php' => ['PhanCompatibleVoidTypePHP70', 'PhanUndeclaredClassConstant', 'PhanUndeclaredClassMethod', 'PhanUndeclaredClassReference', 'PhanUndeclaredTypeParameter', 'PhanUnreferencedUseNormal'], 'htdocs/resource/agenda.php' => ['PhanTypeInvalidLeftOperandOfNumericOp', 'PhanTypeMismatchArgumentProbablyReal'], 'htdocs/resource/card.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchProperty'], 'htdocs/resource/class/dolresource.class.php' => ['PhanPluginUnknownPropertyType', 'PhanTypeMismatchArgumentInternal', 'PhanTypeMismatchDefault', 'PhanTypeMismatchProperty', 'PhanUndeclaredProperty'],