From 8d8c02718ac75ba3a106a15abd2948864ef7a432 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Tue, 28 Mar 2023 19:47:40 +0200 Subject: [PATCH 01/14] Release checklist: minor tweak --- .github/release-checklist.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/release-checklist.md b/.github/release-checklist.md index b2e1f5f2..c684f9e7 100644 --- a/.github/release-checklist.md +++ b/.github/release-checklist.md @@ -21,7 +21,7 @@ PR for tracking changes for the x.x.x release. Target release date: **DOW MONTH - [ ] Close the milestone - [ ] Open a new milestone for the next release - [ ] If any open PRs/issues which were milestoned for this release did not make it into the release, update their milestone. -- [ ] Fast-forward `develop` to be equal to `master` +- [ ] Fast-forward `develop` to be equal to `stable` ### Publicize - [ ] Tweet about the release. From d369c50506920a77f9570bd9353ff0494aa51cf0 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 21 Apr 2023 12:35:11 +0200 Subject: [PATCH 02/14] GH Actions: run `basics` always As the `basics` workflow includes markdown related jobs, the `paths-ignore` for markdown files only changes on push should be removed. --- .github/workflows/basics.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/basics.yml b/.github/workflows/basics.yml index ede7f6ac..d57815ff 100644 --- a/.github/workflows/basics.yml +++ b/.github/workflows/basics.yml @@ -4,8 +4,6 @@ on: # Run on all pushes and on all pull requests. # Prevent the build from running when there are only irrelevant changes. push: - paths-ignore: - - '**.md' pull_request: # Allow manually triggering the workflow. workflow_dispatch: From 8808b708e6e2946e5eacbbb53bcfef510e152283 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 21 Apr 2023 15:46:15 +0200 Subject: [PATCH 03/14] RemarkLint: switch plugin The [`remark-lint-are-links-valid-alive`](https://github.com/wemake-services/remark-lint-are-links-valid) has been abandoned and doesn't allow to skip false positives. The [`remark-lint-no-dead-urls`](https://github.com/remarkjs/remark-lint-no-dead-urls) plugin is still maintained and does allow adding some configuration to skip false positives. This commit switches the one plugin out for the other. --- .github/workflows/basics.yml | 2 +- .remarkrc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/basics.yml b/.github/workflows/basics.yml index d57815ff..44b8614d 100644 --- a/.github/workflows/basics.yml +++ b/.github/workflows/basics.yml @@ -139,8 +139,8 @@ jobs: remark-lint-heading-whitespace remark-lint-list-item-punctuation remark-lint-match-punctuation + remark-lint-no-dead-urls remark-lint-no-hr-after-heading - remark-lint-are-links-valid-alive remark-lint-are-links-valid-duplicate remark-validate-links diff --git a/.remarkrc b/.remarkrc index 83ab108b..d421c791 100644 --- a/.remarkrc +++ b/.remarkrc @@ -8,6 +8,7 @@ ["remark-lint-linebreak-style", "unix"], ["remark-lint-link-title-style", "\""], ["remark-lint-ordered-list-marker-style", "."], + ["remark-lint-no-dead-urls", {"skipUrlPatterns": ["https://www.php.net/"]}], "remark-lint-no-duplicate-defined-urls", "remark-lint-no-duplicate-definitions", "remark-lint-no-empty-url", @@ -29,7 +30,6 @@ "remark-lint-list-item-punctuation", "remark-lint-match-punctuation", "remark-lint-no-hr-after-heading", - "remark-lint-are-links-valid-alive", "remark-lint-are-links-valid-duplicate", "remark-validate-links" ] From 8ba642ca89dad2fe26cc45e48261aa293c9b3689 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 21 Apr 2023 12:33:06 +0200 Subject: [PATCH 04/14] README/CHANGELOG: use language agnostic link --- CHANGELOG.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25270a54..c3404759 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -319,7 +319,7 @@ The upgrade to PHPCSUtils 1.0.0-alpha4 took care of a number of bugs, which pote [#64]: https://github.com/PHPCSStandards/PHPCSExtra/pull/64 [#65]: https://github.com/PHPCSStandards/PHPCSExtra/pull/65 -[operator precedence]: https://www.php.net/manual/en/language.operators.precedence.php +[operator precedence]: https://www.php.net/language.operators.precedence ## [1.0.0-alpha2] - 2020-02-18 diff --git a/README.md b/README.md index 068c7111..2120ce3d 100644 --- a/README.md +++ b/README.md @@ -337,7 +337,7 @@ Enforce that the names used in a class/enum "implements" statement or an interfa Enforce the use of the boolean `&&` and `||` operators instead of the logical `and`/`or` operators. -:information_source: Note: as the [operator precedence](https://www.php.net/manual/en/language.operators.precedence.php) of the logical operators is significantly lower than the operator precedence of boolean operators, this sniff does not contain an auto-fixer. +:information_source: Note: as the [operator precedence](https://www.php.net/language.operators.precedence) of the logical operators is significantly lower than the operator precedence of boolean operators, this sniff does not contain an auto-fixer. #### `Universal.Operators.DisallowShortTernary` :bar_chart: :books: From 6127b3570fb301b247530c43e0c12d4a4b95e1eb Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 21 Apr 2023 12:25:34 +0200 Subject: [PATCH 05/14] Universal/LowercaseClassResolutionKeyword: bug fix for functions called "class" Since PHP 7.0, `class` can be used as a method name. The sniff did not take this into account correctly. Fixed now. Includes unit tests. --- .../Constants/LowercaseClassResolutionKeywordSniff.php | 6 ++++++ .../LowercaseClassResolutionKeywordUnitTest.inc | 9 +++++++++ .../LowercaseClassResolutionKeywordUnitTest.inc.fixed | 9 +++++++++ 3 files changed, 24 insertions(+) diff --git a/Universal/Sniffs/Constants/LowercaseClassResolutionKeywordSniff.php b/Universal/Sniffs/Constants/LowercaseClassResolutionKeywordSniff.php index d461dd2e..6df4e5fe 100644 --- a/Universal/Sniffs/Constants/LowercaseClassResolutionKeywordSniff.php +++ b/Universal/Sniffs/Constants/LowercaseClassResolutionKeywordSniff.php @@ -67,6 +67,12 @@ public function process(File $phpcsFile, $stackPtr) return; } + $nextToken = $phpcsFile->findNext(Tokens::$emptyTokens, ($stackPtr + 1), null, true); + if ($nextToken !== false && $tokens[$nextToken]['code'] === \T_OPEN_PARENTHESIS) { + // Function call or declaration for a function called "class". + return; + } + $prevToken = $phpcsFile->findPrevious(Tokens::$emptyTokens, ($stackPtr - 1), null, true); if ($prevToken === false || $tokens[$prevToken]['code'] !== \T_DOUBLE_COLON) { return; diff --git a/Universal/Tests/Constants/LowercaseClassResolutionKeywordUnitTest.inc b/Universal/Tests/Constants/LowercaseClassResolutionKeywordUnitTest.inc index 0d2c714c..2f598c0b 100644 --- a/Universal/Tests/Constants/LowercaseClassResolutionKeywordUnitTest.inc +++ b/Universal/Tests/Constants/LowercaseClassResolutionKeywordUnitTest.inc @@ -27,3 +27,12 @@ namespace MyNameSpace { echo bar::CLASS; array_map([\MyNameSpace\xyz :: /* comment */ Class, 'methodName'], $array); + +// Safeguard against false positives for methods called "class". +class NotTheMagicConstant { + public function &Class() { + self::Class(); + NotTheMagicConstant::CLASS(); + My\Class\ClassName::clASS(); + } +} diff --git a/Universal/Tests/Constants/LowercaseClassResolutionKeywordUnitTest.inc.fixed b/Universal/Tests/Constants/LowercaseClassResolutionKeywordUnitTest.inc.fixed index fbac4026..fdda1eda 100644 --- a/Universal/Tests/Constants/LowercaseClassResolutionKeywordUnitTest.inc.fixed +++ b/Universal/Tests/Constants/LowercaseClassResolutionKeywordUnitTest.inc.fixed @@ -27,3 +27,12 @@ namespace MyNameSpace { echo bar::class; array_map([\MyNameSpace\xyz :: /* comment */ class, 'methodName'], $array); + +// Safeguard against false positives for methods called "class". +class NotTheMagicConstant { + public function &Class() { + self::Class(); + NotTheMagicConstant::CLASS(); + My\Class\ClassName::clASS(); + } +} From 7072b3810063baed3cdb1ca8077d42fcce25ec18 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Wed, 3 May 2023 11:45:51 +0200 Subject: [PATCH 06/14] Coveralls: use Coveralls specific token Coveralls prefers for repos to be identified with the Coveralls specific token they provide. While the GitHub secret token still works, the intention is to drop support for it at some point in the future. This commit anticipates on that by switching the token. Notes: * The `COVERALLS_TOKEN` has been added to the repo secrets. * People with admin access to the GH repo automatically also have access to the admin settings in Coveralls. If ever needed, the Coveralls token can be found (and regenerated) in the Coveralls admin for a repo. * After regeneration, the token as stored in the GH repo Settings -> Secrets and Variables -> Actions -> Repository secrets should be updated. :point_right: This does mean that forks which have turned Coveralls on for their own fork of this repo will also need to add a `COVERALLS_TOKEN` secret to their GitHub fork (with the token as can be found in the Coveralls settings for their fork). This is a one-time only action. --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cc83b771..4a916dec 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -180,7 +180,7 @@ jobs: - name: Upload coverage results to Coveralls if: ${{ success() }} env: - COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} + COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_TOKEN }} COVERALLS_PARALLEL: true COVERALLS_FLAG_NAME: php-${{ matrix.php }}-phpcs-${{ matrix.phpcs_version }} run: php-coveralls -v -x build/logs/clover.xml @@ -195,5 +195,5 @@ jobs: - name: Coveralls Finished uses: coverallsapp/github-action@v2 with: - github-token: ${{ secrets.GITHUB_TOKEN }} + github-token: ${{ secrets.COVERALLS_TOKEN }} parallel-finished: true From a6133cdcbd61afd804356a3c2416cb5375fe4d4f Mon Sep 17 00:00:00 2001 From: jrfnl Date: Mon, 15 May 2023 14:23:18 +0200 Subject: [PATCH 07/14] GH Actions: prevent failing build Somewhere in the Remark toolchain something has changed which means that it now throws warnings about the cell padding for aligned tables. As those aligned tables are by design (for readability during maintenance of the markdown), this commit is set up to removes those warnings and to enforce aligned tables. The build for this repo is not (yet) failing as no tables are used in markdown, but this change prevent issues further down the line. Refs: * https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-table-pipe-alignment * https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-table-cell-padding --- .remarkrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.remarkrc b/.remarkrc index d421c791..9efe208c 100644 --- a/.remarkrc +++ b/.remarkrc @@ -25,7 +25,7 @@ "remark-lint-no-unneeded-full-reference-link", "remark-lint-no-unused-definitions", ["remark-lint-strikethrough-marker", "~~"], - ["remark-lint-table-cell-padding", "consistent"], + "remark-lint-table-pipe-alignment", "remark-lint-heading-whitespace", "remark-lint-list-item-punctuation", "remark-lint-match-punctuation", From 2cd1fa45e33efa5685c0fd52b5044ffac224910c Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 19 May 2023 07:41:52 +0200 Subject: [PATCH 08/14] Add `security.md` file ... containing information about how to report security issues and what versions of PHPCompatibility are supported from a security point of view. The file is placed in the `.github` directory. This will allow for it to be recognized correctly by GitHub, while not cluttering up the project root directory. Ref: https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository --- .github/SECURITY.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/SECURITY.md diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 00000000..a4360b1e --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,22 @@ +# Security Policy + +## Supported Versions + +The latest patch version of the `1.x` release series is supported for security updates. + +## Reporting a Vulnerability + +PHPCSExtra is a developer tool and should generally not be used in a production (web accessible) environment. + +Having said that, responsible disclosure of security issues is highly appreciated. + +**Please do not report or discuss security vulnerabilities through public GitHub issues, discussions, or pull requests.** + +Issues can be reported privately to the maintainers by opening a [Security vulnerability report](https://github.com/PHPCSStandards/PHPCSExtra/security/advisories/new). + +### Preferences + +* Please provide detailed reports with reproducible steps and a clearly defined impact. +* Include the version number of the vulnerable package in your report. +* Fixes are most welcome. + A private PR can be created from the security report to work on and discuss the patch. From 7fca5c84aed9e8a758f232e321c1f9f27509db54 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 19 May 2023 07:35:54 +0200 Subject: [PATCH 09/14] GH Actions: tweaks for the markdown QA check Looks like the `remark-lint` project has released a new version fixing the bug causing the failing build earlier this week. This commit reverts PR 228. Refs: * https://github.com/remarkjs/remark-lint/releases/tag/9.1.2 * https://github.com/remarkjs/remark-lint/commit/639271aed95fa579623f385bade4939a9c70e959 --- .remarkrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.remarkrc b/.remarkrc index 9efe208c..d421c791 100644 --- a/.remarkrc +++ b/.remarkrc @@ -25,7 +25,7 @@ "remark-lint-no-unneeded-full-reference-link", "remark-lint-no-unused-definitions", ["remark-lint-strikethrough-marker", "~~"], - "remark-lint-table-pipe-alignment", + ["remark-lint-table-cell-padding", "consistent"], "remark-lint-heading-whitespace", "remark-lint-list-item-punctuation", "remark-lint-match-punctuation", From e401c6ffe735472e90503e279a57bf99a3d4db10 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Sat, 17 Jun 2023 16:01:46 +0200 Subject: [PATCH 10/14] CS: minor tweaks --- Universal/Sniffs/Classes/ModifierKeywordOrderSniff.php | 3 +-- Universal/Sniffs/Constants/ModifierKeywordOrderSniff.php | 2 +- Universal/Sniffs/WhiteSpace/DisallowInlineTabsSniff.php | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Universal/Sniffs/Classes/ModifierKeywordOrderSniff.php b/Universal/Sniffs/Classes/ModifierKeywordOrderSniff.php index 692243bd..b5a3330a 100644 --- a/Universal/Sniffs/Classes/ModifierKeywordOrderSniff.php +++ b/Universal/Sniffs/Classes/ModifierKeywordOrderSniff.php @@ -12,7 +12,6 @@ use PHP_CodeSniffer\Files\File; use PHP_CodeSniffer\Sniffs\Sniff; -use PHP_CodeSniffer\Util\Tokens; use PHPCSUtils\Utils\ObjectDeclarations; /** @@ -177,7 +176,7 @@ private function handleError(File $phpcsFile, $firstKeyword, $secondKeyword) $i = ($secondKeyword + 1); while ($tokens[$i]['code'] === \T_WHITESPACE) { $phpcsFile->fixer->replaceToken($i, ''); - $i++; + ++$i; } // Use the original token content as the case used for keywords is not the concern of this sniff. diff --git a/Universal/Sniffs/Constants/ModifierKeywordOrderSniff.php b/Universal/Sniffs/Constants/ModifierKeywordOrderSniff.php index e779bd22..34cf28d8 100644 --- a/Universal/Sniffs/Constants/ModifierKeywordOrderSniff.php +++ b/Universal/Sniffs/Constants/ModifierKeywordOrderSniff.php @@ -187,7 +187,7 @@ private function handleError(File $phpcsFile, $firstKeyword, $secondKeyword) $i = ($secondKeyword + 1); while ($tokens[$i]['code'] === \T_WHITESPACE) { $phpcsFile->fixer->replaceToken($i, ''); - $i++; + ++$i; } // Use the original token content as the case used for keywords is not the concern of this sniff. diff --git a/Universal/Sniffs/WhiteSpace/DisallowInlineTabsSniff.php b/Universal/Sniffs/WhiteSpace/DisallowInlineTabsSniff.php index d91ea3d3..2deee1a8 100644 --- a/Universal/Sniffs/WhiteSpace/DisallowInlineTabsSniff.php +++ b/Universal/Sniffs/WhiteSpace/DisallowInlineTabsSniff.php @@ -94,7 +94,7 @@ public function process(File $phpcsFile, $stackPtr) $this->tabWidth = Helper::getTabWidth($phpcsFile); } - if (defined('PHP_CODESNIFFER_IN_TESTS')) { + if (\defined('PHP_CODESNIFFER_IN_TESTS')) { $this->tabWidth = Helper::getCommandLineData($phpcsFile, 'tabWidth'); } From 35893f20c9d0d23599fdd2077a7aff672dfc8143 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Sat, 17 Jun 2023 23:59:58 +0200 Subject: [PATCH 11/14] Remark lint: ignore version release compare links ... as those won't work until a release has been tagged and cause release PR builds to fail. --- .remarkrc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.remarkrc b/.remarkrc index d421c791..1d946443 100644 --- a/.remarkrc +++ b/.remarkrc @@ -8,7 +8,15 @@ ["remark-lint-linebreak-style", "unix"], ["remark-lint-link-title-style", "\""], ["remark-lint-ordered-list-marker-style", "."], - ["remark-lint-no-dead-urls", {"skipUrlPatterns": ["https://www.php.net/"]}], + [ + "remark-lint-no-dead-urls", + { + "skipUrlPatterns": [ + "https://www.php.net/", + "^https?://github\\.com/PHPCSStandards/PHPCSExtra/compare/[0-9\\.]+?\\.{3}[0-9\\.]+" + ] + } + ], "remark-lint-no-duplicate-defined-urls", "remark-lint-no-duplicate-definitions", "remark-lint-no-empty-url", From 02cfb7db48f2cecc0bff93706eb5d15164158fbb Mon Sep 17 00:00:00 2001 From: jrfnl Date: Sun, 18 Jun 2023 00:28:24 +0200 Subject: [PATCH 12/14] GH Actions: run tests against lowest supported PHPCSUtils ... in the same builds as "lowest supported PHPCS". --- .github/workflows/quicktest.yml | 6 ++++-- .github/workflows/test.yml | 12 ++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/quicktest.yml b/.github/workflows/quicktest.yml index bcb6c297..20c74c6b 100644 --- a/.github/workflows/quicktest.yml +++ b/.github/workflows/quicktest.yml @@ -76,9 +76,11 @@ jobs: composer-options: --ignore-platform-req=php+ custom-cache-suffix: $(date -u "+%Y-%m") - - name: "Composer: set PHPCS version for tests (lowest)" + - name: "Composer: set PHPCS/PHPCSUtils version for tests (lowest)" if: ${{ matrix.phpcs_version == 'lowest' }} - run: composer update squizlabs/php_codesniffer --prefer-lowest --ignore-platform-req=php+ --no-scripts --no-interaction + run: > + composer update squizlabs/php_codesniffer phpcsstandards/phpcsutils + --prefer-lowest --ignore-platform-req=php+ --no-scripts --no-interaction - name: Lint against parse errors if: matrix.phpcs_version == 'dev-master' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4a916dec..aa2b3201 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -82,9 +82,11 @@ jobs: composer-options: --ignore-platform-req=php+ custom-cache-suffix: $(date -u "+%Y-%m") - - name: "Composer: set PHPCS version for tests (lowest)" + - name: "Composer: set PHPCS/PHPCSUtils version for tests (lowest)" if: ${{ matrix.phpcs_version == 'lowest' }} - run: composer update squizlabs/php_codesniffer --prefer-lowest --ignore-platform-req=php+ --no-scripts --no-interaction + run: > + composer update squizlabs/php_codesniffer phpcsstandards/phpcsutils + --prefer-lowest --ignore-platform-req=php+ --no-scripts --no-interaction - name: Lint against parse errors if: matrix.phpcs_version == 'dev-master' @@ -153,9 +155,11 @@ jobs: # Bust the cache at least once a month - output format: YYYY-MM. custom-cache-suffix: $(date -u "+%Y-%m") - - name: "Composer: set PHPCS version for tests (lowest)" + - name: "Composer: set PHPCS/PHPCSUtils version for tests (lowest)" if: ${{ matrix.phpcs_version == 'lowest' }} - run: composer update squizlabs/php_codesniffer --prefer-lowest --ignore-platform-req=php+ --no-scripts --no-interaction + run: > + composer update squizlabs/php_codesniffer phpcsstandards/phpcsutils + --prefer-lowest --ignore-platform-req=php+ --no-scripts --no-interaction - name: Lint against parse errors if: matrix.phpcs_version == 'dev-master' From c6330968e348de4c003da9ebb82ed1cb4bbda3a5 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Sun, 18 Jun 2023 00:20:42 +0200 Subject: [PATCH 13/14] Composer: update version constraints ... of various dependencies. Refs: * https://github.com/PHPCSStandards/PHPCSUtils/releases * https://github.com/PHPCSStandards/PHPCSDevCS/releases/tag/1.1.6 * https://github.com/PHPCSStandards/PHPCSDevTools/releases/tag/1.2.1 --- composer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 6a8cb018..9e56a009 100644 --- a/composer.json +++ b/composer.json @@ -22,13 +22,13 @@ "require" : { "php" : ">=5.4", "squizlabs/php_codesniffer" : "^3.7.1", - "phpcsstandards/phpcsutils" : "^1.0" + "phpcsstandards/phpcsutils" : "^1.0.6" }, "require-dev" : { "php-parallel-lint/php-parallel-lint": "^1.3.2", "php-parallel-lint/php-console-highlighter": "^1.0", - "phpcsstandards/phpcsdevcs": "^1.1.5", - "phpcsstandards/phpcsdevtools": "^1.2.0", + "phpcsstandards/phpcsdevcs": "^1.1.6", + "phpcsstandards/phpcsdevtools": "^1.2.1", "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0" }, "extra": { From 0837f100b0f2b501b2905bc284941b9df1790f19 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Fri, 21 Apr 2023 16:13:34 +0200 Subject: [PATCH 14/14] Changelog for PHPCSExtra 1.0.4 --- CHANGELOG.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3404759..62e346e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,25 @@ This projects adheres to [Keep a CHANGELOG](http://keepachangelog.com/) and uses _Nothing yet._ +## [1.0.4] - 2023-06-18 + +### Changed + +#### Other + +* Composer: The minimum `PHPCSUtils` requirement has been updated to `^1.0.6` (was ^1.0.0). [#237] +* Various housekeeping. + +### Fixed + +#### Universal + +* `Universal.Constants.LowercaseClassResolutionKeyword`: prevent false positives for function calls to methods called `class`. [#226] + +[#226]: https://github.com/PHPCSStandards/PHPCSExtra/pull/226 +[#237]: https://github.com/PHPCSStandards/PHPCSExtra/pull/237 + + ## [1.0.3] - 2023-03-28 ### Changed @@ -422,6 +441,7 @@ This initial alpha release contains the following sniffs: [php_version-config]: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Configuration-Options#setting-the-php-version [Unreleased]: https://github.com/PHPCSStandards/PHPCSExtra/compare/stable...HEAD +[1.0.4]: https://github.com/PHPCSStandards/PHPCSExtra/compare/1.0.3...1.0.4 [1.0.3]: https://github.com/PHPCSStandards/PHPCSExtra/compare/1.0.2...1.0.3 [1.0.2]: https://github.com/PHPCSStandards/PHPCSExtra/compare/1.0.1...1.0.2 [1.0.1]: https://github.com/PHPCSStandards/PHPCSExtra/compare/1.0.0...1.0.1