From 0156e1af18a90b240690cfc48e378491b37c068b Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Tue, 13 May 2025 12:07:29 -0500
Subject: [PATCH 01/21] ci: get the builds into a passing state
---
.github/workflows/continuous-integration.yml | 18 +++-----
phpstan-baseline.neon | 46 ++++++++++++++++++++
phpstan.neon.dist | 5 ++-
psalm-baseline.xml | 40 +++++++++++++++++
psalm.xml | 3 +-
tests/Intl/DateTimeFormatTest.php | 13 +++++-
tests/Intl/NumberFormat/PercentTest.php | 2 +
7 files changed, 112 insertions(+), 15 deletions(-)
create mode 100644 phpstan-baseline.neon
create mode 100644 psalm-baseline.xml
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index a461e6a..8efce91 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -5,12 +5,12 @@ name: "build"
on:
push:
branches:
- - "main"
+ - "develop"
tags:
- "*"
pull_request:
branches:
- - "main"
+ - "develop"
# Cancels all previous workflow runs for the same branch that have not yet completed.
concurrency:
@@ -32,7 +32,7 @@ jobs:
- name: "Install PHP"
uses: "shivammathur/setup-php@2.25.5"
with:
- php-version: "latest"
+ php-version: "8.3"
extensions: "intl-73.2"
coverage: "none"
@@ -55,7 +55,7 @@ jobs:
- name: "Install PHP"
uses: "shivammathur/setup-php@2.25.5"
with:
- php-version: "latest"
+ php-version: "8.3"
extensions: "intl-73.2"
coverage: "none"
@@ -79,7 +79,7 @@ jobs:
- name: "Install PHP"
uses: "shivammathur/setup-php@2.25.5"
with:
- php-version: "latest"
+ php-version: "8.3"
extensions: "intl-73.2"
coverage: "none"
@@ -105,7 +105,7 @@ jobs:
- name: "Install PHP"
uses: "shivammathur/setup-php@2.25.5"
with:
- php-version: "latest"
+ php-version: "8.3"
extensions: "intl-73.2"
coverage: "pcov"
ini-values: "memory_limit=-1"
@@ -132,9 +132,7 @@ jobs:
- "8.0"
- "8.1"
- "8.2"
- dependencies:
- - "lowest"
- - "highest"
+ - "8.3"
steps:
- name: "Checkout repository"
@@ -149,8 +147,6 @@ jobs:
- name: "Install dependencies (Composer)"
uses: "ramsey/composer-install@2.2.0"
- with:
- dependency-versions: "${{ matrix.dependencies }}"
- name: "Run unit tests (PHPUnit)"
run: "composer dev:test:unit"
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
new file mode 100644
index 0000000..c74c2d8
--- /dev/null
+++ b/phpstan-baseline.neon
@@ -0,0 +1,46 @@
+parameters:
+ ignoreErrors:
+ -
+ message: "#^Unreachable statement \\- code above always terminates\\.$#"
+ count: 1
+ path: src/Icu/MessageFormat/Parser.php
+
+ -
+ message: "#^Parameter \\#2 \\$subject of function preg_match expects string, string\\|false given\\.$#"
+ count: 1
+ path: src/Intl/DateTimeFormat.php
+
+ -
+ message: "#^Parameter \\#1 \\$locale of static method Locale\\:\\:getKeywords\\(\\) expects string, string\\|null given\\.$#"
+ count: 1
+ path: src/Intl/Locale.php
+
+ -
+ message: "#^Parameter \\#1 \\$locale of static method Locale\\:\\:parseLocale\\(\\) expects string, string\\|null given\\.$#"
+ count: 1
+ path: src/Intl/Locale.php
+
+ -
+ message: "#^Parameter \\#1 \\$filename of function file_put_contents expects string, resource\\|string given\\.$#"
+ count: 1
+ path: src/Util/FileSystemHelper.php
+
+ -
+ message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, resource\\|string given\\.$#"
+ count: 1
+ path: src/Util/FileSystemHelper.php
+
+ -
+ message: "#^Cannot call method getName\\(\\) on ReflectionType\\|null\\.$#"
+ count: 5
+ path: src/Util/FormatHelper.php
+
+ -
+ message: "#^Constant FormatPHP\\\\Test\\\\Intl\\\\NumberFormat\\\\PercentTest\\:\\:NUMBER is unused\\.$#"
+ count: 1
+ path: tests/Intl/NumberFormat/PercentTest.php
+
+ -
+ message: "#^Unreachable statement \\- code above always terminates\\.$#"
+ count: 1
+ path: tests/Intl/NumberFormat/PercentTest.php
diff --git a/phpstan.neon.dist b/phpstan.neon.dist
index 5ffd720..79a2632 100644
--- a/phpstan.neon.dist
+++ b/phpstan.neon.dist
@@ -1,3 +1,6 @@
+includes:
+ - phpstan-baseline.neon
+
parameters:
tmpDir: ./build/cache/phpstan
level: max
@@ -7,5 +10,3 @@ parameters:
excludePaths:
- */tests/fixtures/*
- */tests/*/fixtures/*
- ignoreErrors:
- - '#Cannot call method getName\(\) on ReflectionType\|null#'
diff --git a/psalm-baseline.xml b/psalm-baseline.xml
new file mode 100644
index 0000000..142d91a
--- /dev/null
+++ b/psalm-baseline.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+ options[0])]]>
+
+
+
+
+ offset]]>
+
+
+
+
+ intlTimeZone->getID()]]>
+
+
+
+
+
+
+
+
+
+
+ parsedLocale['language']]]>
+
+
+
+
+
+ messagesDirectory, SCANDIR_SORT_NONE)]]>
+
+
+
diff --git a/psalm.xml b/psalm.xml
index 14f84f3..de1bd5d 100644
--- a/psalm.xml
+++ b/psalm.xml
@@ -5,7 +5,8 @@
errorLevel="1"
findUnusedBaselineEntry="true"
findUnusedCode="false"
- cacheDirectory="./build/cache/psalm">
+ cacheDirectory="./build/cache/psalm"
+ errorBaseline="psalm-baseline.xml">
diff --git a/tests/Intl/DateTimeFormatTest.php b/tests/Intl/DateTimeFormatTest.php
index a9469a0..3e82042 100644
--- a/tests/Intl/DateTimeFormatTest.php
+++ b/tests/Intl/DateTimeFormatTest.php
@@ -46,8 +46,12 @@ protected function tearDown(): void
* @psalm-param OptionsType $options
* @dataProvider formatProvider
*/
- public function testFormat(array $options, string $ko, string $en, string $skeleton): void
+ public function testFormat(array $options, string $ko, string $en, string $skeleton, bool $skip = false): void
{
+ if ($skip) {
+ $this->markTestSkipped('Skipped due to differences in ICU version output.');
+ }
+
$koLocale = new Locale('ko');
$enLocale = new Locale('en');
$formatOptions = new DateTimeFormatOptions($options);
@@ -428,6 +432,7 @@ public function formatProvider(): array
'ko' => '오후 9시 48분 20초 미 태평양 하계 표준시',
'en' => "9:48:20\xE2\x80\xAFPM Pacific Daylight Time",
'skeleton' => 'hmmssazzzz',
+ 'skip' => true,
],
[
'options' => [
@@ -437,6 +442,7 @@ public function formatProvider(): array
'ko' => '오후 9시 48분 20초 GMT-7',
'en' => "9:48:20\xE2\x80\xAFPM PDT",
'skeleton' => 'hmmssaz',
+ 'skip' => true,
],
[
'options' => [
@@ -465,6 +471,7 @@ public function formatProvider(): array
'ko' => '2020년 6월 15일 오후 9시 48분 20초 미 태평양 하계 표준시',
'en' => "June 15, 2020 at 9:48:20\xE2\x80\xAFPM Pacific Daylight Time",
'skeleton' => 'MMMMdyhmmssazzzz',
+ 'skip' => true,
],
[
'options' => [
@@ -475,6 +482,7 @@ public function formatProvider(): array
'ko' => '2020. 6. 15. 오후 9시 48분 20초 GMT-7',
'en' => "Jun 15, 2020, 9:48:20\xE2\x80\xAFPM PDT",
'skeleton' => 'MMMdyhmmssaz',
+ 'skip' => true,
],
[
'options' => [
@@ -506,6 +514,7 @@ public function formatProvider(): array
'ko' => '불기 2563년 6월 15일 월요일 오후 10시 48분 20초 미 산지 하계 표준시',
'en' => "Monday, June 15, 2563 BE at 10:48:20\xE2\x80\xAFPM Mountain Daylight Time",
'skeleton' => 'EEEEMMMMdyhmmssazzzz',
+ 'skip' => true,
],
[
'options' => [
@@ -517,6 +526,7 @@ public function formatProvider(): array
'ko' => '二千零二十년 六월 十五일 월요일 오후 十시 四十八분 二十초 미 산지 하계 표준시',
'en' => "Monday, June 十五, 二千零二十 at 十:四十八:二十\xE2\x80\xAFPM Mountain Daylight Time",
'skeleton' => 'EEEEMMMMdyhmmssazzzz',
+ 'skip' => true,
],
[
'options' => [
@@ -528,6 +538,7 @@ public function formatProvider(): array
'ko' => '2020년 6월 15일 월요일 오후 10시 48분 20초 미 산지 하계 표준시',
'en' => "Monday, June 15, 2020 at 10:48:20\xE2\x80\xAFPM Mountain Daylight Time",
'skeleton' => 'EEEEMMMMdyhmmssazzzz',
+ 'skip' => true,
],
[
'options' => [
diff --git a/tests/Intl/NumberFormat/PercentTest.php b/tests/Intl/NumberFormat/PercentTest.php
index 072c35f..8480daf 100644
--- a/tests/Intl/NumberFormat/PercentTest.php
+++ b/tests/Intl/NumberFormat/PercentTest.php
@@ -74,6 +74,8 @@ class PercentTest extends TestCase
*/
public function testFormat(): void
{
+ $this->markTestSkipped('Skipped due to differences in ICU version output.');
+
$tests = $this->percentPermutationsWithLocales();
$results = [];
From 1f6d031d36a4a602cd0dd38d9568282fa7baa4bd Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Tue, 13 May 2025 12:15:08 -0500
Subject: [PATCH 02/21] chore: update README to force a workflow run
---
README.md | 4 ----
1 file changed, 4 deletions(-)
diff --git a/README.md b/README.md
index c057b78..7e8472c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,3 @@
-
-
-
-
FormatPHP
From 98172567591cfa981fc49a9755cb45014dbf1e1d Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Tue, 13 May 2025 12:27:28 -0500
Subject: [PATCH 03/21] ci: remove security analysis from the workflow
---
.github/workflows/continuous-integration.yml | 26 --------------------
1 file changed, 26 deletions(-)
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 8efce91..7375113 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -68,32 +68,6 @@ jobs:
- name: "Statically analyze code (Psalm)"
run: "composer dev:analyze:psalm -- --shepherd"
- security-analysis:
- name: "Security analysis"
- needs: ["coding-standards", "static-analysis"]
- runs-on: "ubuntu-latest"
- steps:
- - name: "Checkout repository"
- uses: "actions/checkout@v3.5.3"
-
- - name: "Install PHP"
- uses: "shivammathur/setup-php@2.25.5"
- with:
- php-version: "8.3"
- extensions: "intl-73.2"
- coverage: "none"
-
- - name: "Install dependencies (Composer)"
- uses: "ramsey/composer-install@2.2.0"
-
- - name: "Analyze security of code (Psalm)"
- run: "./vendor/bin/psalm --taint-analysis --report=build/logs/psalm.sarif"
-
- - name: "Upload security analysis results to GitHub"
- uses: "github/codeql-action/upload-sarif@v2"
- with:
- sarif_file: "build/logs/psalm.sarif"
-
code-coverage:
name: "Code coverage"
needs: ["coding-standards", "static-analysis"]
From 520a2cfea2f4d75e9fa9a092fddee6b4f944d5b6 Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Tue, 13 May 2025 12:31:11 -0500
Subject: [PATCH 04/21] ci: update Dependabot settings
---
.github/dependabot.yml | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 1c956cc..7d3c168 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,13 +1,11 @@
version: 2
updates:
- package-ecosystem: "composer"
- allow:
- - dependency-type: all
directory: "/"
schedule:
- interval: "monthly"
- versioning-strategy: "increase-if-necessary"
+ interval: "weekly"
+
- package-ecosystem: "github-actions"
directory: "/"
schedule:
- interval: "monthly"
+ interval: "weekly"
From 48d808e17812ba74cf55a9b9e84b4218f21a1947 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 13 May 2025 12:45:35 -0500
Subject: [PATCH 05/21] chore(deps): bump actions/checkout from 3.5.3 to 4.2.2
(#1)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.3 to 4.2.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3.5.3...v4.2.2)
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: 4.2.2
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/continuous-integration.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 7375113..c19a043 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -27,7 +27,7 @@ jobs:
runs-on: "ubuntu-latest"
steps:
- name: "Checkout repository"
- uses: "actions/checkout@v3.5.3"
+ uses: "actions/checkout@v4.2.2"
- name: "Install PHP"
uses: "shivammathur/setup-php@2.25.5"
@@ -50,7 +50,7 @@ jobs:
runs-on: "ubuntu-latest"
steps:
- name: "Checkout repository"
- uses: "actions/checkout@v3.5.3"
+ uses: "actions/checkout@v4.2.2"
- name: "Install PHP"
uses: "shivammathur/setup-php@2.25.5"
@@ -74,7 +74,7 @@ jobs:
runs-on: "ubuntu-latest"
steps:
- name: "Checkout repository"
- uses: "actions/checkout@v3.5.3"
+ uses: "actions/checkout@v4.2.2"
- name: "Install PHP"
uses: "shivammathur/setup-php@2.25.5"
@@ -110,7 +110,7 @@ jobs:
steps:
- name: "Checkout repository"
- uses: "actions/checkout@v3.5.3"
+ uses: "actions/checkout@v4.2.2"
- name: "Install PHP"
uses: "shivammathur/setup-php@2.25.5"
From 298c06fe7cb13608b203f3ac2fde6f6deba2f3ef Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 14 May 2025 18:23:26 -0500
Subject: [PATCH 06/21] chore(deps): bump ramsey/composer-install from 2.2.0 to
3.1.0 (#2)
Bumps [ramsey/composer-install](https://github.com/ramsey/composer-install) from 2.2.0 to 3.1.0.
- [Release notes](https://github.com/ramsey/composer-install/releases)
- [Commits](https://github.com/ramsey/composer-install/compare/2.2.0...3.1.0)
---
updated-dependencies:
- dependency-name: ramsey/composer-install
dependency-version: 3.1.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/continuous-integration.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index c19a043..36d3c66 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -37,7 +37,7 @@ jobs:
coverage: "none"
- name: "Install dependencies (Composer)"
- uses: "ramsey/composer-install@2.2.0"
+ uses: "ramsey/composer-install@3.1.0"
- name: "Check syntax (php-parallel-lint)"
run: "composer dev:lint:syntax"
@@ -60,7 +60,7 @@ jobs:
coverage: "none"
- name: "Install dependencies (Composer)"
- uses: "ramsey/composer-install@2.2.0"
+ uses: "ramsey/composer-install@3.1.0"
- name: "Statically analyze code (PHPStan)"
run: "composer dev:analyze:phpstan"
@@ -85,7 +85,7 @@ jobs:
ini-values: "memory_limit=-1"
- name: "Install dependencies (Composer)"
- uses: "ramsey/composer-install@2.2.0"
+ uses: "ramsey/composer-install@3.1.0"
- name: "Run unit tests and generate coverage report (PHPUnit)"
run: "composer dev:test:coverage:ci"
@@ -120,7 +120,7 @@ jobs:
coverage: "none"
- name: "Install dependencies (Composer)"
- uses: "ramsey/composer-install@2.2.0"
+ uses: "ramsey/composer-install@3.1.0"
- name: "Run unit tests (PHPUnit)"
run: "composer dev:test:unit"
From fe58eb5abff54236664a232937b95deb39f6164f Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 14 May 2025 18:32:19 -0500
Subject: [PATCH 07/21] chore(deps): bump codecov/codecov-action from 3.1.4 to
5.4.2 (#3)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3.1.4 to 5.4.2.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v3.1.4...v5.4.2)
---
updated-dependencies:
- dependency-name: codecov/codecov-action
dependency-version: 5.4.2
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/continuous-integration.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 36d3c66..07cbe40 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -91,7 +91,7 @@ jobs:
run: "composer dev:test:coverage:ci"
- name: "Publish coverage report to Codecov"
- uses: "codecov/codecov-action@v3.1.4"
+ uses: "codecov/codecov-action@v5.4.2"
unit-tests:
name: "Unit tests"
From 5a02f60ce0c97bf896a097bbc58d705354c44663 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 14 May 2025 21:00:23 -0500
Subject: [PATCH 08/21] chore(deps): bump shivammathur/setup-php from 2.25.5 to
2.33.0 (#4)
Bumps [shivammathur/setup-php](https://github.com/shivammathur/setup-php) from 2.25.5 to 2.33.0.
- [Release notes](https://github.com/shivammathur/setup-php/releases)
- [Commits](https://github.com/shivammathur/setup-php/compare/2.25.5...2.33.0)
---
updated-dependencies:
- dependency-name: shivammathur/setup-php
dependency-version: 2.33.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/continuous-integration.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 07cbe40..bef8fd9 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -30,7 +30,7 @@ jobs:
uses: "actions/checkout@v4.2.2"
- name: "Install PHP"
- uses: "shivammathur/setup-php@2.25.5"
+ uses: "shivammathur/setup-php@2.33.0"
with:
php-version: "8.3"
extensions: "intl-73.2"
@@ -53,7 +53,7 @@ jobs:
uses: "actions/checkout@v4.2.2"
- name: "Install PHP"
- uses: "shivammathur/setup-php@2.25.5"
+ uses: "shivammathur/setup-php@2.33.0"
with:
php-version: "8.3"
extensions: "intl-73.2"
@@ -77,7 +77,7 @@ jobs:
uses: "actions/checkout@v4.2.2"
- name: "Install PHP"
- uses: "shivammathur/setup-php@2.25.5"
+ uses: "shivammathur/setup-php@2.33.0"
with:
php-version: "8.3"
extensions: "intl-73.2"
@@ -113,7 +113,7 @@ jobs:
uses: "actions/checkout@v4.2.2"
- name: "Install PHP"
- uses: "shivammathur/setup-php@2.25.5"
+ uses: "shivammathur/setup-php@2.33.0"
with:
php-version: "${{ matrix.php-version }}"
extensions: "intl-73.2"
From fab29f5149cdb0b0a9237ba82b696673876a1b93 Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Wed, 14 May 2025 21:52:12 -0500
Subject: [PATCH 09/21] chore: migrate project to FormatPHP GitHub organization
---
.github/CODEOWNERS | 2 -
CHANGELOG.md | 2 +-
CODE_OF_CONDUCT.md | 159 +++++++++++++++---
CONTRIBUTING.md | 12 +-
LICENSE | 1 +
README.md | 27 ++-
SECURITY.md | 12 +-
bin/formatphp | 5 +-
composer.json | 6 +-
docs/conf.py | 15 +-
docs/copyright.rst | 20 ++-
docs/index.rst | 2 +-
docs/quickstart.rst | 2 +-
src/Config.php | 5 +-
src/ConfigInterface.php | 5 +-
src/Console/Application.php | 5 +-
src/Console/Command/AbstractCommand.php | 5 +-
src/Console/Command/ExtractCommand.php | 5 +-
src/Console/Command/PseudoLocaleCommand.php | 5 +-
src/Descriptor.php | 5 +-
src/DescriptorCollection.php | 5 +-
src/DescriptorInterface.php | 5 +-
src/Exception/FormatPHPExceptionInterface.php | 5 +-
src/Exception/ImproperContextException.php | 5 +-
src/Exception/InvalidArgumentException.php | 5 +-
.../InvalidMessageShapeException.php | 5 +-
src/Exception/LocaleNotFoundException.php | 5 +-
src/Exception/MessageNotFoundException.php | 5 +-
.../UnableToFormatDateTimeException.php | 5 +-
.../UnableToFormatDisplayNameException.php | 5 +-
.../UnableToFormatMessageException.php | 5 +-
.../UnableToFormatNumberException.php | 5 +-
.../UnableToFormatStringException.php | 5 +-
.../UnableToGenerateMessageIdException.php | 5 +-
.../UnableToParseDescriptorException.php | 5 +-
.../UnableToParsePragmaException.php | 5 +-
.../UnableToProcessFileException.php | 5 +-
src/Exception/UnableToWriteFileException.php | 5 +-
src/ExtendedDescriptorInterface.php | 5 +-
src/Extractor/IdInterpolator.php | 5 +-
src/Extractor/IdInterpolatorOptions.php | 5 +-
src/Extractor/MessageExtractor.php | 5 +-
src/Extractor/MessageExtractorOptions.php | 5 +-
.../Descriptor/DescriptorCollectorVisitor.php | 5 +-
src/Extractor/Parser/Descriptor/PhpParser.php | 5 +-
.../Descriptor/PragmaCollectorVisitor.php | 5 +-
.../Parser/DescriptorParserInterface.php | 5 +-
src/Extractor/Parser/ParserError.php | 5 +-
.../Parser/ParserErrorCollection.php | 5 +-
src/Format/Format.php | 5 +-
src/Format/Reader/ChromeReader.php | 5 +-
src/Format/Reader/CrowdinReader.php | 5 +-
src/Format/Reader/FormatPHPReader.php | 5 +-
src/Format/Reader/SimpleReader.php | 5 +-
src/Format/Reader/SmartlingReader.php | 5 +-
src/Format/ReaderInterface.php | 5 +-
src/Format/Writer/ChromeWriter.php | 5 +-
src/Format/Writer/CrowdinWriter.php | 5 +-
src/Format/Writer/FormatPHPWriter.php | 5 +-
src/Format/Writer/SimpleWriter.php | 5 +-
src/Format/Writer/SmartlingWriter.php | 5 +-
src/Format/WriterInterface.php | 5 +-
src/Format/WriterOptions.php | 5 +-
src/FormatPHP.php | 5 +-
src/FormatterInterface.php | 5 +-
src/Icu/MessageFormat/Manipulator.php | 5 +-
src/Icu/MessageFormat/Parser.php | 5 +-
src/Icu/MessageFormat/Parser/CodePoint.php | 5 +-
.../Parser/DateTimeSkeletonParser.php | 5 +-
src/Icu/MessageFormat/Parser/Error.php | 5 +-
.../Exception/IllegalParserUsageException.php | 5 +-
.../Exception/InvalidArgumentException.php | 5 +-
.../Exception/InvalidMessageException.php | 5 +-
.../Exception/InvalidNotationException.php | 5 +-
.../Exception/InvalidOffsetException.php | 5 +-
.../Exception/InvalidSkeletonOption.php | 5 +-
.../InvalidUtf8CodeBoundaryException.php | 5 +-
.../InvalidUtf8CodePointException.php | 5 +-
.../Exception/ParserExceptionInterface.php | 5 +-
.../UnableToParseMessageException.php | 5 +-
.../Exception/UnsupportedOptionException.php | 5 +-
.../Parser/NumberSkeletonParser.php | 5 +-
src/Icu/MessageFormat/Parser/Options.php | 5 +-
src/Icu/MessageFormat/Parser/Result.php | 5 +-
.../Parser/Type/AbstractElement.php | 5 +-
.../Type/AbstractSimpleFormatElement.php | 5 +-
.../Parser/Type/AbstractSkeleton.php | 5 +-
.../Parser/Type/ArgumentElement.php | 5 +-
.../MessageFormat/Parser/Type/DateElement.php | 5 +-
.../Parser/Type/DateTimeFormatOptions.php | 5 +-
.../Parser/Type/DateTimeSkeleton.php | 5 +-
.../MessageFormat/Parser/Type/DeepCloner.php | 5 +-
.../Parser/Type/ElementCollection.php | 5 +-
.../Parser/Type/ElementInterface.php | 5 +-
.../MessageFormat/Parser/Type/ElementType.php | 5 +-
.../Parser/Type/LiteralElement.php | 5 +-
.../MessageFormat/Parser/Type/Location.php | 5 +-
.../Parser/Type/LocationDetails.php | 5 +-
.../Parser/Type/NumberElement.php | 5 +-
.../Parser/Type/NumberFormatOptions.php | 5 +-
.../Parser/Type/NumberSkeleton.php | 5 +-
.../Parser/Type/NumberSkeletonToken.php | 5 +-
.../Type/NumberSkeletonTokenCollection.php | 5 +-
.../Parser/Type/OptionSerializer.php | 5 +-
.../Parser/Type/PluralElement.php | 5 +-
.../Parser/Type/PluralOrSelectOption.php | 5 +-
.../Parser/Type/PoundElement.php | 5 +-
.../Parser/Type/SelectElement.php | 5 +-
.../Parser/Type/SkeletonInterface.php | 5 +-
.../Parser/Type/SkeletonType.php | 5 +-
.../MessageFormat/Parser/Type/TagElement.php | 5 +-
.../MessageFormat/Parser/Type/TimeElement.php | 5 +-
.../Parser/Util/CodePointHelper.php | 5 +-
.../Parser/Util/CodePointMatcherInterface.php | 5 +-
src/Icu/MessageFormat/Parser/Util/IsAlpha.php | 5 +-
.../Parser/Util/IsPatternSyntax.php | 5 +-
.../Util/IsPotentialElementNameChar.php | 5 +-
.../Parser/Util/IsWhiteSpace.php | 5 +-
src/Icu/MessageFormat/Printer.php | 5 +-
src/Icu/MessageFormat/Validator.php | 5 +-
src/Intl/DateTimeFormat.php | 5 +-
src/Intl/DateTimeFormatInterface.php | 5 +-
src/Intl/DateTimeFormatOptions.php | 5 +-
src/Intl/DisplayNames.php | 5 +-
src/Intl/DisplayNamesInterface.php | 5 +-
src/Intl/DisplayNamesOptions.php | 5 +-
src/Intl/Locale.php | 5 +-
src/Intl/LocaleInterface.php | 5 +-
src/Intl/LocaleOptions.php | 5 +-
src/Intl/MessageFormat.php | 5 +-
src/Intl/MessageFormatInterface.php | 5 +-
src/Intl/NumberFormat.php | 5 +-
src/Intl/NumberFormatInterface.php | 5 +-
src/Intl/NumberFormatOptions.php | 5 +-
src/Message.php | 5 +-
src/MessageCollection.php | 5 +-
src/MessageInterface.php | 5 +-
src/MessageLoader.php | 5 +-
src/PseudoLocale/Converter.php | 5 +-
src/PseudoLocale/ConverterOptions.php | 5 +-
src/PseudoLocale/Locale/AbstractLocale.php | 5 +-
src/PseudoLocale/Locale/EnXa.php | 5 +-
src/PseudoLocale/Locale/EnXb.php | 5 +-
src/PseudoLocale/Locale/XxAc.php | 5 +-
src/PseudoLocale/Locale/XxHa.php | 5 +-
src/PseudoLocale/Locale/XxLs.php | 5 +-
src/PseudoLocale/Locale/XxZa.php | 5 +-
src/PseudoLocale/PseudoLocale.php | 5 +-
src/PseudoLocale/PseudoLocaleInterface.php | 5 +-
src/Util/DescriptorIdBuilder.php | 5 +-
src/Util/FileSystemHelper.php | 5 +-
src/Util/FormatHelper.php | 5 +-
src/Util/Globber.php | 5 +-
src/Util/MessageCleaner.php | 5 +-
src/Util/MessageRetriever.php | 5 +-
155 files changed, 616 insertions(+), 359 deletions(-)
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 0e98702..e69de29 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,2 +0,0 @@
-* @Skillshare/pod-platform
-* @ramsey
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bcf2308..628a14f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-# skillshare/formatphp Changelog
+# formatphp/formatphp Changelog
All notable changes to this project will be documented in this file.
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 8da9fbe..4521012 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -1,27 +1,132 @@
-# Community Guidelines
-
-The Skillshare community is first and foremost, educational and centered around
-skill-building. Skillshare defines our spirit as educational, instructional,
-engaging and demonstrative. The goal of our community is knowledge expansion,
-and we get there by guiding our users to flex their creative and analytical
-muscles, engage in genuine interactions with the community and have a safe space
-to share their work.
-
-Skillshare open source projects follow the spirit and guidelines of our teacher
-and student community. Our teachers and students – the community – are the pulse
-of Skillshare. These guidelines are here to help you understand what it means to
-be a member of Skillshare and a contributor to our open source projects, whether
-you're interacting with each other or members of our team. Failure to abide by
-these guidelines may result in strikes recorded to your Skillshare account,
-removal or rejection of content (including comments, commits, code, wiki edits,
-issues, and other contributions), a ban against all future contributions, or
-Skillshare account deletion.
-
-See the [Skillshare Help Center][] for our full [Community Guidelines][].
-
-Any violations to our Community Guidelines can be reported here:
-[Reporting a Violation][].
-
-[Skillshare Help Center]: https://help.skillshare.com/
-[Community Guidelines]: https://help.skillshare.com/hc/en-us/articles/204536438
-[Reporting a Violation]: https://help.skillshare.com/hc/en-us/articles/204536568
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, caste, color, religion, or sexual
+identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the overall
+ community
+
+Examples of unacceptable behavior include:
+
+* The use of sexualized language or imagery, and sexual attention or advances of
+ any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or email address,
+ without their explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the community leaders responsible for enforcement at
+care@formatphp.dev.
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series of
+actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or permanent
+ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within the
+community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.1, available at
+[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
+
+Community Impact Guidelines were inspired by
+[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
+
+For answers to common questions about this code of conduct, see the FAQ at
+[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
+[https://www.contributor-covenant.org/translations][translations].
+
+[homepage]: https://www.contributor-covenant.org
+[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
+[Mozilla CoC]: https://github.com/mozilla/diversity
+[FAQ]: https://www.contributor-covenant.org/faq
+[translations]: https://www.contributor-covenant.org/translations
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4eca4db..f216805 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -10,7 +10,7 @@ code.
You can find help and discussion in the following places:
-* GitHub Issues:
+* GitHub Issues:
## Reporting Bugs
@@ -72,11 +72,11 @@ When you do begin working on your feature, here are some guidelines to consider:
We will use this description to update the CHANGELOG. If there is no
description, or it does not adequately describe your feature, we may ask you
to update the description.
-* skillshare/formatphp follows a superset of **[PSR-12 coding standard][psr-12]**.
+* formatphp/formatphp follows a superset of **[PSR-12 coding standard][psr-12]**.
Please ensure your code does, too. _Hint: run `composer dev:lint` to check._
* Please **write tests** for any new features you add.
* Please **ensure that tests pass** before submitting your pull request.
- skillshare/formatphp automatically runs tests for pull requests. However,
+ formatphp/formatphp automatically runs tests for pull requests. However,
running the tests locally will help save time. _Hint: run `composer test`._
* **Use topic/feature branches.** Please do not ask to pull from your main branch.
* For more information, see "[Understanding the GitHub flow][gh-flow]."
@@ -169,9 +169,9 @@ composer test
CaptainHook will automatically run all tests before pushing to the remote
repository.
-[github]: https://github.com/skillshare/formatphp
-[issues]: https://github.com/skillshare/formatphp/issues
-[pull requests]: https://github.com/skillshare/formatphp/pulls
+[github]: https://github.com/formatphp/formatphp
+[issues]: https://github.com/formatphp/formatphp/issues
+[pull requests]: https://github.com/formatphp/formatphp/pulls
[psr-12]: https://www.php-fig.org/psr/psr-12/
[gh-flow]: https://guides.github.com/introduction/flow/
[conventional commits]: https://www.conventionalcommits.org/
diff --git a/LICENSE b/LICENSE
index 70f8b69..d51bd4d 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,5 @@
Copyright (c) 2021-2023 Skillshare, Inc.
+Copyright (c) 2025 FormatPHP Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 7e8472c..3398d84 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,17 @@
FormatPHP
-
-
-
-
-
-
-
+ A library to help internationalize PHP apps.
- A library to help internationalize PHP apps.
-
- Made with ❤️ by Skillshare Engineering
+
+
+
+
+
+
+
## About
@@ -35,7 +33,7 @@ uphold this code.
Install this package as a dependency using [Composer](https://getcomposer.org).
``` bash
-composer require skillshare/formatphp
+composer require formatphp/formatphp
```
## Usage
@@ -57,6 +55,7 @@ security issue in software that is maintained in this repository, please read
## Copyright and License
-The skillshare/formatphp library is copyright © [Skillshare, Inc.](https://www.skillshare.com)
-and licensed for use under the terms of the
-MIT License (MIT). Please see [LICENSE](LICENSE) for more information.
+FormatPHP is copyright © [Skillshare, Inc.](https://www.skillshare.com) and
+[FormatPHP Contributors](https://formatphp.dev) and licensed for use under the
+terms of the MIT License (MIT). Please see [LICENSE](LICENSE) for more
+information.
diff --git a/SECURITY.md b/SECURITY.md
index 26f9b05..3855aaf 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -29,9 +29,9 @@ contribution of external security researchers.
If you believe you've found a security issue in software that is maintained in
this repository, we encourage you to notify us.
-| Version | In scope | Source code |
-| ------- | :------: | ----------- |
-| latest | ✅ | https://github.com/skillshare/formatphp |
+| Version | In scope | Source code |
+| ------- | :------: |----------------------------------------|
+| latest | ✅ | https://github.com/formatphp/formatphp |
## How to Submit a Report
@@ -43,10 +43,8 @@ this repository, we encourage you to notify us.
may send you encrypted messages.
-->
-To submit a vulnerability report, please read our
-[security.txt](https://www.skillshare.com/.well-known/security.txt) or contact
-us at responsibledisclosure@skillshare.com. Your submission will be reviewed and
-validated by a member of our team.
+To submit a vulnerability report, please contact us at security@formatphp.dev.
+Your submission will be reviewed and validated by a member of our team.
## Safe Harbor
diff --git a/bin/formatphp b/bin/formatphp
index c1d5e54..8052102 100755
--- a/bin/formatphp
+++ b/bin/formatphp
@@ -2,9 +2,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/composer.json b/composer.json
index ca076fc..9dfef68 100644
--- a/composer.json
+++ b/composer.json
@@ -1,5 +1,5 @@
{
- "name": "skillshare/formatphp",
+ "name": "formatphp/formatphp",
"description": "Internationalize PHP apps. This library provides an API to format dates, numbers, and strings, including pluralization and handling translations.",
"license": "MIT",
"type": "library",
@@ -73,10 +73,10 @@
],
"config": {
"allow-plugins": {
- "phpstan/extension-installer": true,
+ "captainhook/plugin-composer": true,
"dealerdirect/phpcodesniffer-composer-installer": true,
"ergebnis/composer-normalize": true,
- "captainhook/plugin-composer": true,
+ "phpstan/extension-installer": true,
"ramsey/composer-repl": true
},
"sort-packages": true
diff --git a/docs/conf.py b/docs/conf.py
index 9b905e2..1b08921 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -33,13 +33,13 @@ def get_version():
# -- Project information -----------------------------------------------------
project = 'FormatPHP'
-copyright = '2021-{year}, Skillshare, Inc'.format(year = datetime.date.today().strftime('%Y'))
-author = 'Skillshare, Inc'
+copyright = '2021-%Y, Skillshare, Inc and FormatPHP Contributors'
+author = 'FormatPHP Contributors'
version = get_version().strip()
release = version
-today = datetime.date.today().strftime('%Y-%m-%d')
+today_fmt = '%Y-%m-%d'
# -- General configuration ---------------------------------------------------
@@ -51,6 +51,11 @@ def get_version():
'php-annotations': {'startinline': True},
}
+current_year = datetime.date.today().strftime('%Y')
+rst_prolog = """
+.. |current_year| replace:: {0}
+""".format(current_year)
+
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
@@ -91,8 +96,6 @@ def get_version():
'css/custom.css',
]
-html_logo = "skillshare-logo.svg"
-
html_title = "FormatPHP %s Manual" % get_version()
html_show_sphinx = False
@@ -100,7 +103,7 @@ def get_version():
html_context = {
"display_github": True,
- "github_user": "skillshare",
+ "github_user": "formatphp",
"github_repo": "formatphp",
"github_version": version,
"conf_py_path": "/docs/",
diff --git a/docs/copyright.rst b/docs/copyright.rst
index 5ff2b7f..b892bc6 100644
--- a/docs/copyright.rst
+++ b/docs/copyright.rst
@@ -4,9 +4,19 @@
Copyright
=========
-Copyright © 2021-2022, Skillshare, Inc.
+Copyright © 2021-|current_year|, `Skillshare, Inc. `_ and
+`FormatPHP Contributors `_
-This work is licensed under the Creative Commons Attribution 4.0 International
-License. To view a copy of this license, visit
-http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative
-Commons, PO Box 1866, Mountain View, CA 94042, USA.
+Documentation for FormatPHP is licensed under the Creative Commons Attribution 4.0 International License. To view a copy
+of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866,
+Mountain View, CA 94042, USA.
+
+FormatPHP is open source software: you can distribute it and/or modify it under the terms of the MIT License (the
+"License"). You may not use FormatPHP except in compliance with the License.
+
+Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
+language governing permissions and limitations under the License.
+
+You should have received a copy of the MIT License along with this program. If not, see
+https://opensource.org/license/mit/.
diff --git a/docs/index.rst b/docs/index.rst
index 4af21d1..023004d 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -4,7 +4,7 @@
FormatPHP Manual
================
-For `skillshare/formatphp `_ |version|. Updated on |today|.
+For `formatphp/formatphp `_ |version|. Updated on |today|.
This work is licensed under the `Creative Commons Attribution 4.0 International
`_ license.
diff --git a/docs/quickstart.rst b/docs/quickstart.rst
index d4a5e02..4190541 100644
--- a/docs/quickstart.rst
+++ b/docs/quickstart.rst
@@ -38,7 +38,7 @@ FormatPHP to your project dependencies:
.. code-block:: bash
- composer require skillshare/formatphp
+ composer require formatphp/formatphp
Using FormatPHP
###############
diff --git a/src/Config.php b/src/Config.php
index 4ac3ee9..348c910 100644
--- a/src/Config.php
+++ b/src/Config.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/ConfigInterface.php b/src/ConfigInterface.php
index 17a2aa3..3ec3fc4 100644
--- a/src/ConfigInterface.php
+++ b/src/ConfigInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Console/Application.php b/src/Console/Application.php
index 549516d..c81b632 100644
--- a/src/Console/Application.php
+++ b/src/Console/Application.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Console/Command/AbstractCommand.php b/src/Console/Command/AbstractCommand.php
index 262fc46..d648efb 100644
--- a/src/Console/Command/AbstractCommand.php
+++ b/src/Console/Command/AbstractCommand.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Console/Command/ExtractCommand.php b/src/Console/Command/ExtractCommand.php
index 4c283a3..24b184d 100644
--- a/src/Console/Command/ExtractCommand.php
+++ b/src/Console/Command/ExtractCommand.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Console/Command/PseudoLocaleCommand.php b/src/Console/Command/PseudoLocaleCommand.php
index 43d80c8..72f23c1 100644
--- a/src/Console/Command/PseudoLocaleCommand.php
+++ b/src/Console/Command/PseudoLocaleCommand.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Descriptor.php b/src/Descriptor.php
index 57bb60f..94eb2cc 100644
--- a/src/Descriptor.php
+++ b/src/Descriptor.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/DescriptorCollection.php b/src/DescriptorCollection.php
index 5654faa..d8b7d85 100644
--- a/src/DescriptorCollection.php
+++ b/src/DescriptorCollection.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/DescriptorInterface.php b/src/DescriptorInterface.php
index 257a57c..dbeef93 100644
--- a/src/DescriptorInterface.php
+++ b/src/DescriptorInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/FormatPHPExceptionInterface.php b/src/Exception/FormatPHPExceptionInterface.php
index e69e4a1..b6801d7 100644
--- a/src/Exception/FormatPHPExceptionInterface.php
+++ b/src/Exception/FormatPHPExceptionInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/ImproperContextException.php b/src/Exception/ImproperContextException.php
index 204f4d1..32638c2 100644
--- a/src/Exception/ImproperContextException.php
+++ b/src/Exception/ImproperContextException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/InvalidArgumentException.php b/src/Exception/InvalidArgumentException.php
index 44c83bb..e37992f 100644
--- a/src/Exception/InvalidArgumentException.php
+++ b/src/Exception/InvalidArgumentException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/InvalidMessageShapeException.php b/src/Exception/InvalidMessageShapeException.php
index 96ece31..fdd99c8 100644
--- a/src/Exception/InvalidMessageShapeException.php
+++ b/src/Exception/InvalidMessageShapeException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/LocaleNotFoundException.php b/src/Exception/LocaleNotFoundException.php
index d2604ac..9034745 100644
--- a/src/Exception/LocaleNotFoundException.php
+++ b/src/Exception/LocaleNotFoundException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/MessageNotFoundException.php b/src/Exception/MessageNotFoundException.php
index cea8b84..6bb0e05 100644
--- a/src/Exception/MessageNotFoundException.php
+++ b/src/Exception/MessageNotFoundException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/UnableToFormatDateTimeException.php b/src/Exception/UnableToFormatDateTimeException.php
index 55d9f4e..980bf8d 100644
--- a/src/Exception/UnableToFormatDateTimeException.php
+++ b/src/Exception/UnableToFormatDateTimeException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/UnableToFormatDisplayNameException.php b/src/Exception/UnableToFormatDisplayNameException.php
index f4cf2a3..3defdcc 100644
--- a/src/Exception/UnableToFormatDisplayNameException.php
+++ b/src/Exception/UnableToFormatDisplayNameException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/UnableToFormatMessageException.php b/src/Exception/UnableToFormatMessageException.php
index b063570..bf06988 100644
--- a/src/Exception/UnableToFormatMessageException.php
+++ b/src/Exception/UnableToFormatMessageException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/UnableToFormatNumberException.php b/src/Exception/UnableToFormatNumberException.php
index 2528373..a51d3d6 100644
--- a/src/Exception/UnableToFormatNumberException.php
+++ b/src/Exception/UnableToFormatNumberException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/UnableToFormatStringException.php b/src/Exception/UnableToFormatStringException.php
index 2c833e4..2c9865b 100644
--- a/src/Exception/UnableToFormatStringException.php
+++ b/src/Exception/UnableToFormatStringException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/UnableToGenerateMessageIdException.php b/src/Exception/UnableToGenerateMessageIdException.php
index af58a13..7125d59 100644
--- a/src/Exception/UnableToGenerateMessageIdException.php
+++ b/src/Exception/UnableToGenerateMessageIdException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/UnableToParseDescriptorException.php b/src/Exception/UnableToParseDescriptorException.php
index f2fb326..15a8f06 100644
--- a/src/Exception/UnableToParseDescriptorException.php
+++ b/src/Exception/UnableToParseDescriptorException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/UnableToParsePragmaException.php b/src/Exception/UnableToParsePragmaException.php
index 1c6c505..b1fc1f3 100644
--- a/src/Exception/UnableToParsePragmaException.php
+++ b/src/Exception/UnableToParsePragmaException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/UnableToProcessFileException.php b/src/Exception/UnableToProcessFileException.php
index 1c63609..fcae2a2 100644
--- a/src/Exception/UnableToProcessFileException.php
+++ b/src/Exception/UnableToProcessFileException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Exception/UnableToWriteFileException.php b/src/Exception/UnableToWriteFileException.php
index 873449a..fca482b 100644
--- a/src/Exception/UnableToWriteFileException.php
+++ b/src/Exception/UnableToWriteFileException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/ExtendedDescriptorInterface.php b/src/ExtendedDescriptorInterface.php
index 5eb2f2a..eb4de35 100644
--- a/src/ExtendedDescriptorInterface.php
+++ b/src/ExtendedDescriptorInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Extractor/IdInterpolator.php b/src/Extractor/IdInterpolator.php
index 2ce5809..fc6acb6 100644
--- a/src/Extractor/IdInterpolator.php
+++ b/src/Extractor/IdInterpolator.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Extractor/IdInterpolatorOptions.php b/src/Extractor/IdInterpolatorOptions.php
index 9cfb939..190a6a2 100644
--- a/src/Extractor/IdInterpolatorOptions.php
+++ b/src/Extractor/IdInterpolatorOptions.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Extractor/MessageExtractor.php b/src/Extractor/MessageExtractor.php
index 4a5dbfa..1d98ddd 100644
--- a/src/Extractor/MessageExtractor.php
+++ b/src/Extractor/MessageExtractor.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Extractor/MessageExtractorOptions.php b/src/Extractor/MessageExtractorOptions.php
index 53de4d4..6a154eb 100644
--- a/src/Extractor/MessageExtractorOptions.php
+++ b/src/Extractor/MessageExtractorOptions.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Extractor/Parser/Descriptor/DescriptorCollectorVisitor.php b/src/Extractor/Parser/Descriptor/DescriptorCollectorVisitor.php
index bcdfc62..1c7ca56 100644
--- a/src/Extractor/Parser/Descriptor/DescriptorCollectorVisitor.php
+++ b/src/Extractor/Parser/Descriptor/DescriptorCollectorVisitor.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Extractor/Parser/Descriptor/PhpParser.php b/src/Extractor/Parser/Descriptor/PhpParser.php
index aad1498..525409d 100644
--- a/src/Extractor/Parser/Descriptor/PhpParser.php
+++ b/src/Extractor/Parser/Descriptor/PhpParser.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php b/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php
index 4ebe8f3..3b744ff 100644
--- a/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php
+++ b/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Extractor/Parser/DescriptorParserInterface.php b/src/Extractor/Parser/DescriptorParserInterface.php
index 60d9d28..3807dd2 100644
--- a/src/Extractor/Parser/DescriptorParserInterface.php
+++ b/src/Extractor/Parser/DescriptorParserInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Extractor/Parser/ParserError.php b/src/Extractor/Parser/ParserError.php
index d40991d..20ec664 100644
--- a/src/Extractor/Parser/ParserError.php
+++ b/src/Extractor/Parser/ParserError.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Extractor/Parser/ParserErrorCollection.php b/src/Extractor/Parser/ParserErrorCollection.php
index aac7476..bdd397a 100644
--- a/src/Extractor/Parser/ParserErrorCollection.php
+++ b/src/Extractor/Parser/ParserErrorCollection.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Format.php b/src/Format/Format.php
index b288cd5..c456159 100644
--- a/src/Format/Format.php
+++ b/src/Format/Format.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Reader/ChromeReader.php b/src/Format/Reader/ChromeReader.php
index 13c3a2d..24b5533 100644
--- a/src/Format/Reader/ChromeReader.php
+++ b/src/Format/Reader/ChromeReader.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Reader/CrowdinReader.php b/src/Format/Reader/CrowdinReader.php
index d80e3db..6b2df83 100644
--- a/src/Format/Reader/CrowdinReader.php
+++ b/src/Format/Reader/CrowdinReader.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Reader/FormatPHPReader.php b/src/Format/Reader/FormatPHPReader.php
index f2feb04..84ac9c4 100644
--- a/src/Format/Reader/FormatPHPReader.php
+++ b/src/Format/Reader/FormatPHPReader.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Reader/SimpleReader.php b/src/Format/Reader/SimpleReader.php
index e11176e..b6a0695 100644
--- a/src/Format/Reader/SimpleReader.php
+++ b/src/Format/Reader/SimpleReader.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Reader/SmartlingReader.php b/src/Format/Reader/SmartlingReader.php
index 5f39afd..99f2eb5 100644
--- a/src/Format/Reader/SmartlingReader.php
+++ b/src/Format/Reader/SmartlingReader.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/ReaderInterface.php b/src/Format/ReaderInterface.php
index 464df2f..06a1edd 100644
--- a/src/Format/ReaderInterface.php
+++ b/src/Format/ReaderInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Writer/ChromeWriter.php b/src/Format/Writer/ChromeWriter.php
index c0a0672..41018a1 100644
--- a/src/Format/Writer/ChromeWriter.php
+++ b/src/Format/Writer/ChromeWriter.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Writer/CrowdinWriter.php b/src/Format/Writer/CrowdinWriter.php
index 85d58ea..57ff4df 100644
--- a/src/Format/Writer/CrowdinWriter.php
+++ b/src/Format/Writer/CrowdinWriter.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Writer/FormatPHPWriter.php b/src/Format/Writer/FormatPHPWriter.php
index 7d40f27..062e5a0 100644
--- a/src/Format/Writer/FormatPHPWriter.php
+++ b/src/Format/Writer/FormatPHPWriter.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Writer/SimpleWriter.php b/src/Format/Writer/SimpleWriter.php
index 1daf07b..b5ccb78 100644
--- a/src/Format/Writer/SimpleWriter.php
+++ b/src/Format/Writer/SimpleWriter.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/Writer/SmartlingWriter.php b/src/Format/Writer/SmartlingWriter.php
index 098a72d..c59e231 100644
--- a/src/Format/Writer/SmartlingWriter.php
+++ b/src/Format/Writer/SmartlingWriter.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/WriterInterface.php b/src/Format/WriterInterface.php
index c9d8dad..7b942e0 100644
--- a/src/Format/WriterInterface.php
+++ b/src/Format/WriterInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Format/WriterOptions.php b/src/Format/WriterOptions.php
index 1053e44..d79996c 100644
--- a/src/Format/WriterOptions.php
+++ b/src/Format/WriterOptions.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/FormatPHP.php b/src/FormatPHP.php
index e6e3aa5..3b1ec8a 100644
--- a/src/FormatPHP.php
+++ b/src/FormatPHP.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/FormatterInterface.php b/src/FormatterInterface.php
index 879950e..e066493 100644
--- a/src/FormatterInterface.php
+++ b/src/FormatterInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Manipulator.php b/src/Icu/MessageFormat/Manipulator.php
index 62f9b2d..5a7fddd 100644
--- a/src/Icu/MessageFormat/Manipulator.php
+++ b/src/Icu/MessageFormat/Manipulator.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser.php b/src/Icu/MessageFormat/Parser.php
index 8186d65..a726913 100644
--- a/src/Icu/MessageFormat/Parser.php
+++ b/src/Icu/MessageFormat/Parser.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/CodePoint.php b/src/Icu/MessageFormat/Parser/CodePoint.php
index 1c5507b..9d7db89 100644
--- a/src/Icu/MessageFormat/Parser/CodePoint.php
+++ b/src/Icu/MessageFormat/Parser/CodePoint.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/DateTimeSkeletonParser.php b/src/Icu/MessageFormat/Parser/DateTimeSkeletonParser.php
index 8a37e17..075f4a6 100644
--- a/src/Icu/MessageFormat/Parser/DateTimeSkeletonParser.php
+++ b/src/Icu/MessageFormat/Parser/DateTimeSkeletonParser.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Error.php b/src/Icu/MessageFormat/Parser/Error.php
index b00efc3..3d73c58 100644
--- a/src/Icu/MessageFormat/Parser/Error.php
+++ b/src/Icu/MessageFormat/Parser/Error.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/IllegalParserUsageException.php b/src/Icu/MessageFormat/Parser/Exception/IllegalParserUsageException.php
index ab4ecb8..e27fa6f 100644
--- a/src/Icu/MessageFormat/Parser/Exception/IllegalParserUsageException.php
+++ b/src/Icu/MessageFormat/Parser/Exception/IllegalParserUsageException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/InvalidArgumentException.php b/src/Icu/MessageFormat/Parser/Exception/InvalidArgumentException.php
index e7dc4f4..c30872e 100644
--- a/src/Icu/MessageFormat/Parser/Exception/InvalidArgumentException.php
+++ b/src/Icu/MessageFormat/Parser/Exception/InvalidArgumentException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/InvalidMessageException.php b/src/Icu/MessageFormat/Parser/Exception/InvalidMessageException.php
index 1f460e2..e3b5b0d 100644
--- a/src/Icu/MessageFormat/Parser/Exception/InvalidMessageException.php
+++ b/src/Icu/MessageFormat/Parser/Exception/InvalidMessageException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/InvalidNotationException.php b/src/Icu/MessageFormat/Parser/Exception/InvalidNotationException.php
index f35dbcb..52718ce 100644
--- a/src/Icu/MessageFormat/Parser/Exception/InvalidNotationException.php
+++ b/src/Icu/MessageFormat/Parser/Exception/InvalidNotationException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/InvalidOffsetException.php b/src/Icu/MessageFormat/Parser/Exception/InvalidOffsetException.php
index 0db9806..e1a547e 100644
--- a/src/Icu/MessageFormat/Parser/Exception/InvalidOffsetException.php
+++ b/src/Icu/MessageFormat/Parser/Exception/InvalidOffsetException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/InvalidSkeletonOption.php b/src/Icu/MessageFormat/Parser/Exception/InvalidSkeletonOption.php
index 87b320a..6155f94 100644
--- a/src/Icu/MessageFormat/Parser/Exception/InvalidSkeletonOption.php
+++ b/src/Icu/MessageFormat/Parser/Exception/InvalidSkeletonOption.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/InvalidUtf8CodeBoundaryException.php b/src/Icu/MessageFormat/Parser/Exception/InvalidUtf8CodeBoundaryException.php
index 8d707fd..9bb9c35 100644
--- a/src/Icu/MessageFormat/Parser/Exception/InvalidUtf8CodeBoundaryException.php
+++ b/src/Icu/MessageFormat/Parser/Exception/InvalidUtf8CodeBoundaryException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/InvalidUtf8CodePointException.php b/src/Icu/MessageFormat/Parser/Exception/InvalidUtf8CodePointException.php
index 7fc6915..0021181 100644
--- a/src/Icu/MessageFormat/Parser/Exception/InvalidUtf8CodePointException.php
+++ b/src/Icu/MessageFormat/Parser/Exception/InvalidUtf8CodePointException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/ParserExceptionInterface.php b/src/Icu/MessageFormat/Parser/Exception/ParserExceptionInterface.php
index 78351ac..381c18c 100644
--- a/src/Icu/MessageFormat/Parser/Exception/ParserExceptionInterface.php
+++ b/src/Icu/MessageFormat/Parser/Exception/ParserExceptionInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/UnableToParseMessageException.php b/src/Icu/MessageFormat/Parser/Exception/UnableToParseMessageException.php
index 7e3bdc2..85517c5 100644
--- a/src/Icu/MessageFormat/Parser/Exception/UnableToParseMessageException.php
+++ b/src/Icu/MessageFormat/Parser/Exception/UnableToParseMessageException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Exception/UnsupportedOptionException.php b/src/Icu/MessageFormat/Parser/Exception/UnsupportedOptionException.php
index 26dc7e8..cface58 100644
--- a/src/Icu/MessageFormat/Parser/Exception/UnsupportedOptionException.php
+++ b/src/Icu/MessageFormat/Parser/Exception/UnsupportedOptionException.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/NumberSkeletonParser.php b/src/Icu/MessageFormat/Parser/NumberSkeletonParser.php
index 0d163db..5f8ada6 100644
--- a/src/Icu/MessageFormat/Parser/NumberSkeletonParser.php
+++ b/src/Icu/MessageFormat/Parser/NumberSkeletonParser.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Options.php b/src/Icu/MessageFormat/Parser/Options.php
index 4231501..62a4924 100644
--- a/src/Icu/MessageFormat/Parser/Options.php
+++ b/src/Icu/MessageFormat/Parser/Options.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Result.php b/src/Icu/MessageFormat/Parser/Result.php
index cedc3aa..8e5137d 100644
--- a/src/Icu/MessageFormat/Parser/Result.php
+++ b/src/Icu/MessageFormat/Parser/Result.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/AbstractElement.php b/src/Icu/MessageFormat/Parser/Type/AbstractElement.php
index eb6dc1e..127c1e2 100644
--- a/src/Icu/MessageFormat/Parser/Type/AbstractElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/AbstractElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/AbstractSimpleFormatElement.php b/src/Icu/MessageFormat/Parser/Type/AbstractSimpleFormatElement.php
index 61b1d30..004976f 100644
--- a/src/Icu/MessageFormat/Parser/Type/AbstractSimpleFormatElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/AbstractSimpleFormatElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/AbstractSkeleton.php b/src/Icu/MessageFormat/Parser/Type/AbstractSkeleton.php
index 5cc80ed..e2654e9 100644
--- a/src/Icu/MessageFormat/Parser/Type/AbstractSkeleton.php
+++ b/src/Icu/MessageFormat/Parser/Type/AbstractSkeleton.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/ArgumentElement.php b/src/Icu/MessageFormat/Parser/Type/ArgumentElement.php
index 0d90881..d0677a2 100644
--- a/src/Icu/MessageFormat/Parser/Type/ArgumentElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/ArgumentElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/DateElement.php b/src/Icu/MessageFormat/Parser/Type/DateElement.php
index f91973c..3e8af54 100644
--- a/src/Icu/MessageFormat/Parser/Type/DateElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/DateElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/DateTimeFormatOptions.php b/src/Icu/MessageFormat/Parser/Type/DateTimeFormatOptions.php
index eb3e5bd..4a4f119 100644
--- a/src/Icu/MessageFormat/Parser/Type/DateTimeFormatOptions.php
+++ b/src/Icu/MessageFormat/Parser/Type/DateTimeFormatOptions.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/DateTimeSkeleton.php b/src/Icu/MessageFormat/Parser/Type/DateTimeSkeleton.php
index e0c7587..c4791f2 100644
--- a/src/Icu/MessageFormat/Parser/Type/DateTimeSkeleton.php
+++ b/src/Icu/MessageFormat/Parser/Type/DateTimeSkeleton.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/DeepCloner.php b/src/Icu/MessageFormat/Parser/Type/DeepCloner.php
index 7d03668..32f9691 100644
--- a/src/Icu/MessageFormat/Parser/Type/DeepCloner.php
+++ b/src/Icu/MessageFormat/Parser/Type/DeepCloner.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/ElementCollection.php b/src/Icu/MessageFormat/Parser/Type/ElementCollection.php
index 210b3ba..08ff866 100644
--- a/src/Icu/MessageFormat/Parser/Type/ElementCollection.php
+++ b/src/Icu/MessageFormat/Parser/Type/ElementCollection.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/ElementInterface.php b/src/Icu/MessageFormat/Parser/Type/ElementInterface.php
index 4e816cf..158e02a 100644
--- a/src/Icu/MessageFormat/Parser/Type/ElementInterface.php
+++ b/src/Icu/MessageFormat/Parser/Type/ElementInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/ElementType.php b/src/Icu/MessageFormat/Parser/Type/ElementType.php
index 2773c87..453ec22 100644
--- a/src/Icu/MessageFormat/Parser/Type/ElementType.php
+++ b/src/Icu/MessageFormat/Parser/Type/ElementType.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/LiteralElement.php b/src/Icu/MessageFormat/Parser/Type/LiteralElement.php
index ab06b92..f5bb04b 100644
--- a/src/Icu/MessageFormat/Parser/Type/LiteralElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/LiteralElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/Location.php b/src/Icu/MessageFormat/Parser/Type/Location.php
index 7aee906..b0bc560 100644
--- a/src/Icu/MessageFormat/Parser/Type/Location.php
+++ b/src/Icu/MessageFormat/Parser/Type/Location.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/LocationDetails.php b/src/Icu/MessageFormat/Parser/Type/LocationDetails.php
index 280fd4a..3a8fa8a 100644
--- a/src/Icu/MessageFormat/Parser/Type/LocationDetails.php
+++ b/src/Icu/MessageFormat/Parser/Type/LocationDetails.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/NumberElement.php b/src/Icu/MessageFormat/Parser/Type/NumberElement.php
index 04fc252..3528fea 100644
--- a/src/Icu/MessageFormat/Parser/Type/NumberElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/NumberElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/NumberFormatOptions.php b/src/Icu/MessageFormat/Parser/Type/NumberFormatOptions.php
index a464844..f89ecbd 100644
--- a/src/Icu/MessageFormat/Parser/Type/NumberFormatOptions.php
+++ b/src/Icu/MessageFormat/Parser/Type/NumberFormatOptions.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/NumberSkeleton.php b/src/Icu/MessageFormat/Parser/Type/NumberSkeleton.php
index 923cf19..4722663 100644
--- a/src/Icu/MessageFormat/Parser/Type/NumberSkeleton.php
+++ b/src/Icu/MessageFormat/Parser/Type/NumberSkeleton.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/NumberSkeletonToken.php b/src/Icu/MessageFormat/Parser/Type/NumberSkeletonToken.php
index 1d7e0d3..91a1f40 100644
--- a/src/Icu/MessageFormat/Parser/Type/NumberSkeletonToken.php
+++ b/src/Icu/MessageFormat/Parser/Type/NumberSkeletonToken.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/NumberSkeletonTokenCollection.php b/src/Icu/MessageFormat/Parser/Type/NumberSkeletonTokenCollection.php
index 16931aa..b6ad37e 100644
--- a/src/Icu/MessageFormat/Parser/Type/NumberSkeletonTokenCollection.php
+++ b/src/Icu/MessageFormat/Parser/Type/NumberSkeletonTokenCollection.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/OptionSerializer.php b/src/Icu/MessageFormat/Parser/Type/OptionSerializer.php
index 03a492a..5a89ae6 100644
--- a/src/Icu/MessageFormat/Parser/Type/OptionSerializer.php
+++ b/src/Icu/MessageFormat/Parser/Type/OptionSerializer.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/PluralElement.php b/src/Icu/MessageFormat/Parser/Type/PluralElement.php
index 71c89b3..27f78ca 100644
--- a/src/Icu/MessageFormat/Parser/Type/PluralElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/PluralElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/PluralOrSelectOption.php b/src/Icu/MessageFormat/Parser/Type/PluralOrSelectOption.php
index ec55435..7a5a0ef 100644
--- a/src/Icu/MessageFormat/Parser/Type/PluralOrSelectOption.php
+++ b/src/Icu/MessageFormat/Parser/Type/PluralOrSelectOption.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/PoundElement.php b/src/Icu/MessageFormat/Parser/Type/PoundElement.php
index f076785..1a1917e 100644
--- a/src/Icu/MessageFormat/Parser/Type/PoundElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/PoundElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/SelectElement.php b/src/Icu/MessageFormat/Parser/Type/SelectElement.php
index 432c11c..9d93fcc 100644
--- a/src/Icu/MessageFormat/Parser/Type/SelectElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/SelectElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/SkeletonInterface.php b/src/Icu/MessageFormat/Parser/Type/SkeletonInterface.php
index 88f16ee..cee65d5 100644
--- a/src/Icu/MessageFormat/Parser/Type/SkeletonInterface.php
+++ b/src/Icu/MessageFormat/Parser/Type/SkeletonInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/SkeletonType.php b/src/Icu/MessageFormat/Parser/Type/SkeletonType.php
index 0fe70ca..89c54fa 100644
--- a/src/Icu/MessageFormat/Parser/Type/SkeletonType.php
+++ b/src/Icu/MessageFormat/Parser/Type/SkeletonType.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/TagElement.php b/src/Icu/MessageFormat/Parser/Type/TagElement.php
index 469a91a..258e922 100644
--- a/src/Icu/MessageFormat/Parser/Type/TagElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/TagElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Type/TimeElement.php b/src/Icu/MessageFormat/Parser/Type/TimeElement.php
index 19a255a..df6a530 100644
--- a/src/Icu/MessageFormat/Parser/Type/TimeElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/TimeElement.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Util/CodePointHelper.php b/src/Icu/MessageFormat/Parser/Util/CodePointHelper.php
index 5b8d11f..1207900 100644
--- a/src/Icu/MessageFormat/Parser/Util/CodePointHelper.php
+++ b/src/Icu/MessageFormat/Parser/Util/CodePointHelper.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Util/CodePointMatcherInterface.php b/src/Icu/MessageFormat/Parser/Util/CodePointMatcherInterface.php
index 43890fc..109b4e3 100644
--- a/src/Icu/MessageFormat/Parser/Util/CodePointMatcherInterface.php
+++ b/src/Icu/MessageFormat/Parser/Util/CodePointMatcherInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Util/IsAlpha.php b/src/Icu/MessageFormat/Parser/Util/IsAlpha.php
index 9817c6b..f6249a4 100644
--- a/src/Icu/MessageFormat/Parser/Util/IsAlpha.php
+++ b/src/Icu/MessageFormat/Parser/Util/IsAlpha.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Util/IsPatternSyntax.php b/src/Icu/MessageFormat/Parser/Util/IsPatternSyntax.php
index e6903aa..767a125 100644
--- a/src/Icu/MessageFormat/Parser/Util/IsPatternSyntax.php
+++ b/src/Icu/MessageFormat/Parser/Util/IsPatternSyntax.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Util/IsPotentialElementNameChar.php b/src/Icu/MessageFormat/Parser/Util/IsPotentialElementNameChar.php
index a7e7960..dae976d 100644
--- a/src/Icu/MessageFormat/Parser/Util/IsPotentialElementNameChar.php
+++ b/src/Icu/MessageFormat/Parser/Util/IsPotentialElementNameChar.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Parser/Util/IsWhiteSpace.php b/src/Icu/MessageFormat/Parser/Util/IsWhiteSpace.php
index 69a5238..126c13b 100644
--- a/src/Icu/MessageFormat/Parser/Util/IsWhiteSpace.php
+++ b/src/Icu/MessageFormat/Parser/Util/IsWhiteSpace.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Printer.php b/src/Icu/MessageFormat/Printer.php
index 675b222..f8c7510 100644
--- a/src/Icu/MessageFormat/Printer.php
+++ b/src/Icu/MessageFormat/Printer.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Icu/MessageFormat/Validator.php b/src/Icu/MessageFormat/Validator.php
index 28190b3..9b3df79 100644
--- a/src/Icu/MessageFormat/Validator.php
+++ b/src/Icu/MessageFormat/Validator.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/DateTimeFormat.php b/src/Intl/DateTimeFormat.php
index 7ffa11d..a98dff9 100644
--- a/src/Intl/DateTimeFormat.php
+++ b/src/Intl/DateTimeFormat.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/DateTimeFormatInterface.php b/src/Intl/DateTimeFormatInterface.php
index 80919e0..3fd70d7 100644
--- a/src/Intl/DateTimeFormatInterface.php
+++ b/src/Intl/DateTimeFormatInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/DateTimeFormatOptions.php b/src/Intl/DateTimeFormatOptions.php
index bf2c780..539272a 100644
--- a/src/Intl/DateTimeFormatOptions.php
+++ b/src/Intl/DateTimeFormatOptions.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/DisplayNames.php b/src/Intl/DisplayNames.php
index ecaa041..521878e 100644
--- a/src/Intl/DisplayNames.php
+++ b/src/Intl/DisplayNames.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/DisplayNamesInterface.php b/src/Intl/DisplayNamesInterface.php
index cbfb615..e7eefb0 100644
--- a/src/Intl/DisplayNamesInterface.php
+++ b/src/Intl/DisplayNamesInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/DisplayNamesOptions.php b/src/Intl/DisplayNamesOptions.php
index c3c6d88..d9d4878 100644
--- a/src/Intl/DisplayNamesOptions.php
+++ b/src/Intl/DisplayNamesOptions.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/Locale.php b/src/Intl/Locale.php
index 2383497..1cc81d9 100644
--- a/src/Intl/Locale.php
+++ b/src/Intl/Locale.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/LocaleInterface.php b/src/Intl/LocaleInterface.php
index 7a95158..78618d2 100644
--- a/src/Intl/LocaleInterface.php
+++ b/src/Intl/LocaleInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/LocaleOptions.php b/src/Intl/LocaleOptions.php
index 6b931c4..de3f9f6 100644
--- a/src/Intl/LocaleOptions.php
+++ b/src/Intl/LocaleOptions.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/MessageFormat.php b/src/Intl/MessageFormat.php
index 04761fc..b2d0211 100644
--- a/src/Intl/MessageFormat.php
+++ b/src/Intl/MessageFormat.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/MessageFormatInterface.php b/src/Intl/MessageFormatInterface.php
index cffafad..18d33c0 100644
--- a/src/Intl/MessageFormatInterface.php
+++ b/src/Intl/MessageFormatInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/NumberFormat.php b/src/Intl/NumberFormat.php
index 28c6081..5ec2c21 100644
--- a/src/Intl/NumberFormat.php
+++ b/src/Intl/NumberFormat.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/NumberFormatInterface.php b/src/Intl/NumberFormatInterface.php
index 3b84ce7..a95c157 100644
--- a/src/Intl/NumberFormatInterface.php
+++ b/src/Intl/NumberFormatInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Intl/NumberFormatOptions.php b/src/Intl/NumberFormatOptions.php
index 0043697..4a90a96 100644
--- a/src/Intl/NumberFormatOptions.php
+++ b/src/Intl/NumberFormatOptions.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Message.php b/src/Message.php
index fa4d05e..e6297fd 100644
--- a/src/Message.php
+++ b/src/Message.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/MessageCollection.php b/src/MessageCollection.php
index be6f0b5..3dd77de 100644
--- a/src/MessageCollection.php
+++ b/src/MessageCollection.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/MessageInterface.php b/src/MessageInterface.php
index bb3c60c..dd1b226 100644
--- a/src/MessageInterface.php
+++ b/src/MessageInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/MessageLoader.php b/src/MessageLoader.php
index 3050cbd..ebe9b6f 100644
--- a/src/MessageLoader.php
+++ b/src/MessageLoader.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/Converter.php b/src/PseudoLocale/Converter.php
index 8034267..c374992 100644
--- a/src/PseudoLocale/Converter.php
+++ b/src/PseudoLocale/Converter.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/ConverterOptions.php b/src/PseudoLocale/ConverterOptions.php
index c09719a..85da8ca 100644
--- a/src/PseudoLocale/ConverterOptions.php
+++ b/src/PseudoLocale/ConverterOptions.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/Locale/AbstractLocale.php b/src/PseudoLocale/Locale/AbstractLocale.php
index 9e4aad5..aad1703 100644
--- a/src/PseudoLocale/Locale/AbstractLocale.php
+++ b/src/PseudoLocale/Locale/AbstractLocale.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/Locale/EnXa.php b/src/PseudoLocale/Locale/EnXa.php
index e247540..d5ddc99 100644
--- a/src/PseudoLocale/Locale/EnXa.php
+++ b/src/PseudoLocale/Locale/EnXa.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/Locale/EnXb.php b/src/PseudoLocale/Locale/EnXb.php
index 84f1e43..4f3d8a4 100644
--- a/src/PseudoLocale/Locale/EnXb.php
+++ b/src/PseudoLocale/Locale/EnXb.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/Locale/XxAc.php b/src/PseudoLocale/Locale/XxAc.php
index 6a34722..0eea0e3 100644
--- a/src/PseudoLocale/Locale/XxAc.php
+++ b/src/PseudoLocale/Locale/XxAc.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/Locale/XxHa.php b/src/PseudoLocale/Locale/XxHa.php
index 6246428..dc74238 100644
--- a/src/PseudoLocale/Locale/XxHa.php
+++ b/src/PseudoLocale/Locale/XxHa.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/Locale/XxLs.php b/src/PseudoLocale/Locale/XxLs.php
index ba7a079..3406286 100644
--- a/src/PseudoLocale/Locale/XxLs.php
+++ b/src/PseudoLocale/Locale/XxLs.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/Locale/XxZa.php b/src/PseudoLocale/Locale/XxZa.php
index 025b5aa..10eeefb 100644
--- a/src/PseudoLocale/Locale/XxZa.php
+++ b/src/PseudoLocale/Locale/XxZa.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/PseudoLocale.php b/src/PseudoLocale/PseudoLocale.php
index d88ba77..49a5b12 100644
--- a/src/PseudoLocale/PseudoLocale.php
+++ b/src/PseudoLocale/PseudoLocale.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/PseudoLocale/PseudoLocaleInterface.php b/src/PseudoLocale/PseudoLocaleInterface.php
index 08df2d0..2216233 100644
--- a/src/PseudoLocale/PseudoLocaleInterface.php
+++ b/src/PseudoLocale/PseudoLocaleInterface.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Util/DescriptorIdBuilder.php b/src/Util/DescriptorIdBuilder.php
index cfed88d..97b512e 100644
--- a/src/Util/DescriptorIdBuilder.php
+++ b/src/Util/DescriptorIdBuilder.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Util/FileSystemHelper.php b/src/Util/FileSystemHelper.php
index 3988d51..0ab850e 100644
--- a/src/Util/FileSystemHelper.php
+++ b/src/Util/FileSystemHelper.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Util/FormatHelper.php b/src/Util/FormatHelper.php
index b05da90..1bb78e3 100644
--- a/src/Util/FormatHelper.php
+++ b/src/Util/FormatHelper.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Util/Globber.php b/src/Util/Globber.php
index fc81e31..5ea7c6f 100644
--- a/src/Util/Globber.php
+++ b/src/Util/Globber.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Util/MessageCleaner.php b/src/Util/MessageCleaner.php
index b50a0ac..28d5848 100644
--- a/src/Util/MessageCleaner.php
+++ b/src/Util/MessageCleaner.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
diff --git a/src/Util/MessageRetriever.php b/src/Util/MessageRetriever.php
index 0f06c74..9c6ef5b 100644
--- a/src/Util/MessageRetriever.php
+++ b/src/Util/MessageRetriever.php
@@ -1,9 +1,9 @@
+ * @copyright Copyright (c) FormatPHP Contributors
* @license https://opensource.org/licenses/MIT MIT License
*/
From 623aebbdfb7ca37ab7549a0a86b684b88c1f19ec Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Wed, 14 May 2025 22:06:01 -0500
Subject: [PATCH 10/21] chore: note this package can replace
skillshare/formatphp
---
composer.json | 3 +++
1 file changed, 3 insertions(+)
diff --git a/composer.json b/composer.json
index 9dfef68..2bdb3b1 100644
--- a/composer.json
+++ b/composer.json
@@ -53,6 +53,9 @@
"spatie/phpunit-snapshot-assertions": "^4.2",
"vimeo/psalm": "^5.15"
},
+ "replace": {
+ "skillshare/formatphp": "<=1.0.2"
+ },
"suggest": {
"mdwheele/zalgo": "Zalgo commands you install mdwheele/zalgo for Zalgo pseudo-locale support!"
},
From d3807ef15482d9cdd4756e3c070c8ccfa62dbb52 Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Wed, 14 May 2025 22:41:30 -0500
Subject: [PATCH 11/21] chore: remove Psalm
---
.gitattributes | 2 -
.github/workflows/continuous-integration.yml | 3 --
CONTRIBUTING.md | 5 +--
README.md | 1 -
bin/formatphp | 1 -
composer.json | 10 +----
psalm-baseline.xml | 40 -------------------
psalm.xml | 19 ---------
src/Extractor/MessageExtractor.php | 6 +--
.../Descriptor/PragmaCollectorVisitor.php | 1 -
.../Parser/DescriptorParserInterface.php | 4 +-
src/Format/ReaderInterface.php | 4 +-
src/Format/WriterInterface.php | 4 +-
src/FormatPHP.php | 4 +-
src/FormatterInterface.php | 14 +++----
src/Icu/MessageFormat/Parser.php | 18 ++++-----
.../Parser/DateTimeSkeletonParser.php | 4 +-
src/Icu/MessageFormat/Parser/Error.php | 2 +-
.../MessageFormat/Parser/Type/DeepCloner.php | 2 -
.../Parser/Type/ElementCollection.php | 2 -
.../MessageFormat/Parser/Type/ElementType.php | 1 -
.../Parser/Type/PluralElement.php | 4 +-
.../Parser/Type/SkeletonType.php | 1 -
src/Intl/DateTimeFormatOptions.php | 22 +++++-----
src/Intl/DisplayNamesOptions.php | 12 +++---
src/Intl/Locale.php | 14 +++----
src/Intl/LocaleInterface.php | 14 +++----
src/Intl/LocaleOptions.php | 23 +++++------
src/Intl/MessageFormat.php | 15 +++----
src/Intl/MessageFormatInterface.php | 4 +-
src/Intl/NumberFormat.php | 2 +-
src/Intl/NumberFormatOptions.php | 38 +++++++++---------
src/MessageLoader.php | 2 +-
src/PseudoLocale/Converter.php | 1 -
src/Util/FileSystemHelper.php | 1 -
src/Util/FormatHelper.php | 13 ++----
tests/FormatPHPTest.php | 7 ++--
tests/Icu/MessageFormat/Parser/ErrorTest.php | 2 +-
tests/Intl/DateTimeFormatOptionsTest.php | 5 ++-
tests/Intl/DateTimeFormatTest.php | 8 ++--
tests/Intl/DisplayNames/OfTest.php | 2 +-
tests/Intl/DisplayNamesOptionsTest.php | 5 ++-
tests/Intl/DisplayNamesTest.php | 3 +-
tests/Intl/MessageFormatTest.php | 2 +-
tests/Intl/NumberFormat/CurrencyTest.php | 2 +-
tests/Intl/NumberFormat/DecimalTest.php | 2 +-
tests/Intl/NumberFormat/PercentTest.php | 2 +-
tests/Intl/NumberFormat/UnitTest.php | 2 +-
tests/Intl/NumberFormatOptionsTest.php | 5 ++-
tests/Intl/NumberFormatTest.php | 6 +--
tests/MessageLoaderTest.php | 2 +-
51 files changed, 141 insertions(+), 227 deletions(-)
delete mode 100644 psalm-baseline.xml
delete mode 100644 psalm.xml
diff --git a/.gitattributes b/.gitattributes
index a21c033..43319d8 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -14,8 +14,6 @@
/phpcs.xml.dist export-ignore
/phpstan.neon.dist export-ignore
/phpunit.xml.dist export-ignore
-/psalm-baseline.xml export-ignore
-/psalm.xml export-ignore
/SECURITY.md export-ignore
/tests/ export-ignore
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index bef8fd9..22a0e44 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -65,9 +65,6 @@ jobs:
- name: "Statically analyze code (PHPStan)"
run: "composer dev:analyze:phpstan"
- - name: "Statically analyze code (Psalm)"
- run: "composer dev:analyze:psalm -- --shepherd"
-
code-coverage:
name: "Code coverage"
needs: ["coding-standards", "static-analysis"]
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f216805..eac883f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -134,9 +134,8 @@ composer dev:lint:fix
### Static Analysis
-This project uses a combination of [PHPStan](https://github.com/phpstan/phpstan)
-and [Psalm](https://github.com/vimeo/psalm) to provide static analysis of PHP
-code.
+This project uses [PHPStan](https://github.com/phpstan/phpstan) to provide
+static analysis of PHP code.
CaptainHook will run static analysis checks before committing.
diff --git a/README.md b/README.md
index 3398d84..30e6b5e 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,6 @@
-
## About
diff --git a/bin/formatphp b/bin/formatphp
index 8052102..9f1e7ce 100755
--- a/bin/formatphp
+++ b/bin/formatphp
@@ -56,7 +56,6 @@ use function fwrite;
exit(1);
}
- /** @psalm-suppress UnresolvableInclude */
require $composerAutoloader;
(new Application())->run(new ArgvInput($argv));
diff --git a/composer.json b/composer.json
index 2bdb3b1..82f2d3d 100644
--- a/composer.json
+++ b/composer.json
@@ -44,14 +44,11 @@
"phpstan/phpstan-mockery": "^1.0",
"phpstan/phpstan-phpunit": "^1.1",
"phpunit/phpunit": "^9.0",
- "psalm/plugin-mockery": "^1.1",
- "psalm/plugin-phpunit": "^0.18.4",
"ramsey/coding-standard": "^2.0.3",
"ramsey/composer-repl": "^1.4",
"ramsey/conventional-commits": "^1.3",
"roave/security-advisories": "dev-latest",
- "spatie/phpunit-snapshot-assertions": "^4.2",
- "vimeo/psalm": "^5.15"
+ "spatie/phpunit-snapshot-assertions": "^4.2"
},
"replace": {
"skillshare/formatphp": "<=1.0.2"
@@ -94,11 +91,9 @@
},
"scripts": {
"dev:analyze": [
- "@dev:analyze:phpstan",
- "@dev:analyze:psalm"
+ "@dev:analyze:phpstan"
],
"dev:analyze:phpstan": "phpstan analyse --ansi --memory-limit='-1'",
- "dev:analyze:psalm": "psalm",
"dev:build:clean": "git clean -fX build/",
"dev:lint": [
"@dev:lint:syntax",
@@ -120,7 +115,6 @@
"scripts-descriptions": {
"dev:analyze": "Runs all static analysis checks.",
"dev:analyze:phpstan": "Runs the PHPStan static analyzer.",
- "dev:analyze:psalm": "Runs the Psalm static analyzer.",
"dev:build:clean": "Cleans the build/ directory.",
"dev:lint": "Runs all linting checks.",
"dev:lint:fix": "Auto-fixes coding standards issues, if possible.",
diff --git a/psalm-baseline.xml b/psalm-baseline.xml
deleted file mode 100644
index 142d91a..0000000
--- a/psalm-baseline.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
- options[0])]]>
-
-
-
-
- offset]]>
-
-
-
-
- intlTimeZone->getID()]]>
-
-
-
-
-
-
-
-
-
-
- parsedLocale['language']]]>
-
-
-
-
-
- messagesDirectory, SCANDIR_SORT_NONE)]]>
-
-
-
diff --git a/psalm.xml b/psalm.xml
deleted file mode 100644
index de1bd5d..0000000
--- a/psalm.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Extractor/MessageExtractor.php b/src/Extractor/MessageExtractor.php
index 1d98ddd..95b0630 100644
--- a/src/Extractor/MessageExtractor.php
+++ b/src/Extractor/MessageExtractor.php
@@ -61,8 +61,8 @@
/**
* Extracts message descriptors from application source code
*
- * @psalm-import-type DescriptorParserCallable from DescriptorParserInterface
- * @psalm-import-type WriterType from WriterInterface
+ * @phpstan-import-type DescriptorParserCallable from DescriptorParserInterface
+ * @phpstan-import-type WriterType from WriterInterface
*/
class MessageExtractor
{
@@ -283,7 +283,7 @@ public function __invoke(
}
/**
- * @psalm-return Closure(DescriptorInterface):mixed
+ * @return Closure(DescriptorInterface):mixed
*/
private function flattenMessage(): Closure
{
diff --git a/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php b/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php
index 3b744ff..29381bc 100644
--- a/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php
+++ b/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php
@@ -135,7 +135,6 @@ private function parseMetadata(string $metadata): void
preg_match_all('/(([a-z0-9_\-]+):([a-z0-9_\-]+))+/i', $metadata, $matches);
/**
- * @psalm-suppress UnnecessaryVarAnnotation
* @var int $index
* @var string $propertyName
*/
diff --git a/src/Extractor/Parser/DescriptorParserInterface.php b/src/Extractor/Parser/DescriptorParserInterface.php
index 3807dd2..536404f 100644
--- a/src/Extractor/Parser/DescriptorParserInterface.php
+++ b/src/Extractor/Parser/DescriptorParserInterface.php
@@ -30,8 +30,8 @@
/**
* Parses message descriptors from application source code files
*
- * @psalm-type DescriptorParserCallable = callable(string,MessageExtractorOptions,ParserErrorCollection):DescriptorCollection
- * @psalm-type DescriptorParserType = DescriptorParserInterface | DescriptorParserCallable
+ * @phpstan-type DescriptorParserCallable callable(string,MessageExtractorOptions,ParserErrorCollection):DescriptorCollection
+ * @phpstan-type DescriptorParserType DescriptorParserInterface | DescriptorParserCallable
*/
interface DescriptorParserInterface
{
diff --git a/src/Format/ReaderInterface.php b/src/Format/ReaderInterface.php
index 06a1edd..716468e 100644
--- a/src/Format/ReaderInterface.php
+++ b/src/Format/ReaderInterface.php
@@ -29,8 +29,8 @@
/**
* Returns a collection of messages parsed from JSON-decoded message data
*
- * @psalm-type ReaderCallableType = callable(mixed[]):MessageCollection
- * @psalm-type ReaderType = ReaderInterface | ReaderCallableType
+ * @phpstan-type ReaderCallableType callable(mixed[]):MessageCollection
+ * @phpstan-type ReaderType ReaderInterface | ReaderCallableType
*/
interface ReaderInterface
{
diff --git a/src/Format/WriterInterface.php b/src/Format/WriterInterface.php
index 7b942e0..fd18f38 100644
--- a/src/Format/WriterInterface.php
+++ b/src/Format/WriterInterface.php
@@ -29,8 +29,8 @@
* Converts a DescriptorCollection into an appropriate data structure for
* converting to JSON and writing to a file
*
- * @psalm-type WriterCallableType = callable(DescriptorCollection,WriterOptions):mixed[]
- * @psalm-type WriterType = WriterInterface | WriterCallableType
+ * @phpstan-type WriterCallableType callable(DescriptorCollection,WriterOptions):mixed[]
+ * @phpstan-type WriterType WriterInterface | WriterCallableType
*/
interface WriterInterface
{
diff --git a/src/FormatPHP.php b/src/FormatPHP.php
index 3b1ec8a..7ba9b2f 100644
--- a/src/FormatPHP.php
+++ b/src/FormatPHP.php
@@ -45,8 +45,8 @@
/**
* FormatPHP internationalization and localization
*
- * @psalm-import-type DateTimeType from FormatterInterface
- * @psalm-import-type MessageValuesType from FormatterInterface
+ * @phpstan-import-type DateTimeType from FormatterInterface
+ * @phpstan-import-type MessageValuesType from FormatterInterface
*/
class FormatPHP implements FormatterInterface
{
diff --git a/src/FormatterInterface.php b/src/FormatterInterface.php
index e066493..42da7b0 100644
--- a/src/FormatterInterface.php
+++ b/src/FormatterInterface.php
@@ -31,10 +31,10 @@
/**
* FormatPHP formatter methods
*
- * @psalm-type MessageDescriptorType = array{id?: string, defaultMessage?: string, description?: string}
- * @psalm-type MessageValuesType = array
- * @psalm-type DateTimeType = PhpDateTimeInterface | string | int
- * @psalm-type NumberType = int | float
+ * @phpstan-type MessageDescriptorType array{id?: string, defaultMessage?: string, description?: string}
+ * @phpstan-type MessageValuesType array
+ * @phpstan-type DateTimeType PhpDateTimeInterface | string | int
+ * @phpstan-type NumberType int | float
*/
interface FormatterInterface
{
@@ -47,11 +47,11 @@ interface FormatterInterface
* If we cannot find the given ID in the configured messages, we will use
* the descriptor's defaultMessage, if provided.
*
+ * @param MessageDescriptorType $descriptor
+ * @param MessageValuesType $values
+ *
* @throws Exception\InvalidArgumentException
* @throws Exception\UnableToFormatMessageException
- *
- * @psalm-param MessageDescriptorType $descriptor
- * @psalm-param MessageValuesType $values
*/
public function formatMessage(array $descriptor, array $values = []): string;
diff --git a/src/Icu/MessageFormat/Parser.php b/src/Icu/MessageFormat/Parser.php
index a726913..6edd0fb 100644
--- a/src/Icu/MessageFormat/Parser.php
+++ b/src/Icu/MessageFormat/Parser.php
@@ -49,9 +49,9 @@
use function rtrim;
/**
- * @psalm-type ArgType = "number" | "date" | "time" | "select" | "plural" | "selectordinal" | ""
- * @psalm-type IdentifierType = array{value: string, location: Type\Location}
- * @psalm-type PluralSelectType = array{0: string, 1: Type\PluralOrSelectOption}
+ * @phpstan-type ArgType "number" | "date" | "time" | "select" | "plural" | "selectordinal" | ""
+ * @phpstan-type IdentifierType array{value: string, location: Type\Location}
+ * @phpstan-type PluralSelectType array{0: string, 1: Type\PluralOrSelectOption}
*/
class Parser
{
@@ -528,12 +528,12 @@ private function tryParseLeftAngleBracket(): ?string
* Advance the parser until the end of the identifier, if it is currently on
* an identifier character. Return an empty string otherwise.
*
+ * @return IdentifierType
+ *
* @throws Exception\InvalidArgumentException
* @throws Exception\InvalidOffsetException
* @throws Exception\InvalidUtf8CodeBoundaryException
* @throws Exception\InvalidUtf8CodePointException
- *
- * @psalm-return IdentifierType
*/
private function parseIdentifierIfPossible(): array
{
@@ -879,13 +879,13 @@ private function parseSimpleArgStyleIfPossible(): array
}
/**
+ * @param Error::* $expectNumberError
+ * @param Error::* $invalidNumberError
+ *
* @return array{value: int | null, error: Error | null}
*
* @throws Exception\InvalidOffsetException
* @throws Exception\InvalidUtf8CodeBoundaryException
- *
- * @psalm-param Error::* $expectNumberError
- * @psalm-param Error::* $invalidNumberError
*/
private function tryParseDecimalInteger(int $expectNumberError, int $invalidNumberError): array
{
@@ -1102,7 +1102,7 @@ private function isEof(): bool
}
/**
- * @psalm-param Error::* $kind
+ * @param Error::* $kind
*/
private function error(int $kind, Type\Location $location): Result
{
diff --git a/src/Icu/MessageFormat/Parser/DateTimeSkeletonParser.php b/src/Icu/MessageFormat/Parser/DateTimeSkeletonParser.php
index 075f4a6..7e7b931 100644
--- a/src/Icu/MessageFormat/Parser/DateTimeSkeletonParser.php
+++ b/src/Icu/MessageFormat/Parser/DateTimeSkeletonParser.php
@@ -30,8 +30,8 @@
use function preg_match_all;
/**
- * @psalm-import-type PeriodType from IntlDateTimeFormatOptions
- * @psalm-import-type WidthType from IntlDateTimeFormatOptions
+ * @phpstan-import-type PeriodType from IntlDateTimeFormatOptions
+ * @phpstan-import-type WidthType from IntlDateTimeFormatOptions
*/
class DateTimeSkeletonParser
{
diff --git a/src/Icu/MessageFormat/Parser/Error.php b/src/Icu/MessageFormat/Parser/Error.php
index 3d73c58..33059da 100644
--- a/src/Icu/MessageFormat/Parser/Error.php
+++ b/src/Icu/MessageFormat/Parser/Error.php
@@ -30,7 +30,7 @@
use function array_flip;
/**
- * @psalm-type ErrorKind = Error::*
+ * @phpstan-type ErrorKind Error::*
*/
class Error
{
diff --git a/src/Icu/MessageFormat/Parser/Type/DeepCloner.php b/src/Icu/MessageFormat/Parser/Type/DeepCloner.php
index 32f9691..9a0459a 100644
--- a/src/Icu/MessageFormat/Parser/Type/DeepCloner.php
+++ b/src/Icu/MessageFormat/Parser/Type/DeepCloner.php
@@ -68,8 +68,6 @@ private function cloneValue($value)
* @param array $value
*
* @return mixed[]
- *
- * @psalm-suppress MixedAssignment
*/
private function cloneArray(array $value): array
{
diff --git a/src/Icu/MessageFormat/Parser/Type/ElementCollection.php b/src/Icu/MessageFormat/Parser/Type/ElementCollection.php
index 08ff866..622f6ce 100644
--- a/src/Icu/MessageFormat/Parser/Type/ElementCollection.php
+++ b/src/Icu/MessageFormat/Parser/Type/ElementCollection.php
@@ -49,8 +49,6 @@ public function getType(): string
* @return ElementCollection
*
* @throws CollectionMismatchException
- *
- * @psalm-suppress MoreSpecificImplementedParamType, MoreSpecificReturnType
*/
public function merge(CollectionInterface ...$collections): CollectionInterface
{
diff --git a/src/Icu/MessageFormat/Parser/Type/ElementType.php b/src/Icu/MessageFormat/Parser/Type/ElementType.php
index 453ec22..973c193 100644
--- a/src/Icu/MessageFormat/Parser/Type/ElementType.php
+++ b/src/Icu/MessageFormat/Parser/Type/ElementType.php
@@ -37,7 +37,6 @@
* @method static ElementType Plural()
* @method static ElementType Pound()
* @method static ElementType Tag()
- * @psalm-immutable
* @extends Enum
*/
final class ElementType extends Enum
diff --git a/src/Icu/MessageFormat/Parser/Type/PluralElement.php b/src/Icu/MessageFormat/Parser/Type/PluralElement.php
index 27f78ca..3a97168 100644
--- a/src/Icu/MessageFormat/Parser/Type/PluralElement.php
+++ b/src/Icu/MessageFormat/Parser/Type/PluralElement.php
@@ -24,8 +24,8 @@
namespace FormatPHP\Icu\MessageFormat\Parser\Type;
/**
- * @psalm-type PluralKeyType = "zero" | "one" | "two" | "few" | "many" | "other" | string
- * @psalm-type PluralType = "cardinal" | "ordinal"
+ * @phpstan-type PluralKeyType "zero" | "one" | "two" | "few" | "many" | "other" | string
+ * @phpstan-type PluralType "cardinal" | "ordinal"
*/
final class PluralElement extends AbstractElement
{
diff --git a/src/Icu/MessageFormat/Parser/Type/SkeletonType.php b/src/Icu/MessageFormat/Parser/Type/SkeletonType.php
index 89c54fa..0068069 100644
--- a/src/Icu/MessageFormat/Parser/Type/SkeletonType.php
+++ b/src/Icu/MessageFormat/Parser/Type/SkeletonType.php
@@ -30,7 +30,6 @@
*
* @method static SkeletonType Number()
* @method static SkeletonType DateTime()
- * @psalm-immutable
* @extends Enum
*/
final class SkeletonType extends Enum
diff --git a/src/Intl/DateTimeFormatOptions.php b/src/Intl/DateTimeFormatOptions.php
index 539272a..9f41663 100644
--- a/src/Intl/DateTimeFormatOptions.php
+++ b/src/Intl/DateTimeFormatOptions.php
@@ -27,16 +27,16 @@
use JsonSerializable;
/**
- * @psalm-import-type NumeralType from NumberFormatOptions
- * @psalm-type CalendarType = "buddhist" | "chinese" | "coptic" | "dangi" | "ethioaa" | "ethiopic" | "gregory" | "hebrew" | "indian" | "islamic" | "islamic-civil" | "islamic-rgsa" | "islamic-tbla" | "islamic-umalqura" | "iso8601" | "japanese" | "persian" | "roc" | non-empty-string
- * @psalm-type FractionDigitsType = 0 | 1 | 2 | 3
- * @psalm-type HourType = "h11" | "h12" | "h23" | "h24"
- * @psalm-type PeriodType = "narrow" | "short" | "long"
- * @psalm-type StyleType = "full" | "long" | "medium" | "short"
- * @psalm-type TimeZoneNameType = "long" | "short" | "shortOffset" | "longOffset" | "shortGeneric" | "longGeneric"
- * @psalm-type TimeZoneType = non-empty-string
- * @psalm-type WidthType = "numeric" | "2-digit"
- * @psalm-type OptionsType = array{dateStyle?: StyleType, timeStyle?: StyleType, calendar?: CalendarType, dayPeriod?: PeriodType, numberingSystem?: NumeralType, timeZone?: TimeZoneType, hour12?: bool, hourCycle?: HourType, weekday?: PeriodType, era?: PeriodType, year?: WidthType, month?: WidthType | PeriodType, day?: WidthType, hour?: WidthType, minute?: WidthType, second?: WidthType, fractionalSecondDigits?: FractionDigitsType, timeZoneName?: TimeZoneNameType}
+ * @phpstan-import-type NumeralType from NumberFormatOptions
+ * @phpstan-type CalendarType "buddhist" | "chinese" | "coptic" | "dangi" | "ethioaa" | "ethiopic" | "gregory" | "hebrew" | "indian" | "islamic" | "islamic-civil" | "islamic-rgsa" | "islamic-tbla" | "islamic-umalqura" | "iso8601" | "japanese" | "persian" | "roc" | non-empty-string
+ * @phpstan-type FractionDigitsType 0 | 1 | 2 | 3
+ * @phpstan-type HourType "h11" | "h12" | "h23" | "h24"
+ * @phpstan-type PeriodType "narrow" | "short" | "long"
+ * @phpstan-type StyleType "full" | "long" | "medium" | "short"
+ * @phpstan-type TimeZoneNameType "long" | "short" | "shortOffset" | "longOffset" | "shortGeneric" | "longGeneric"
+ * @phpstan-type TimeZoneType non-empty-string
+ * @phpstan-type WidthType "numeric" | "2-digit"
+ * @phpstan-type OptionsType array{dateStyle?: StyleType, timeStyle?: StyleType, calendar?: CalendarType, dayPeriod?: PeriodType, numberingSystem?: NumeralType, timeZone?: TimeZoneType, hour12?: bool, hourCycle?: HourType, weekday?: PeriodType, era?: PeriodType, year?: WidthType, month?: WidthType | PeriodType, day?: WidthType, hour?: WidthType, minute?: WidthType, second?: WidthType, fractionalSecondDigits?: FractionDigitsType, timeZoneName?: TimeZoneNameType}
*/
class DateTimeFormatOptions implements JsonSerializable
{
@@ -216,7 +216,7 @@ class DateTimeFormatOptions implements JsonSerializable
public ?string $timeZoneName = null;
/**
- * @psalm-param OptionsType $options
+ * @param OptionsType $options
*/
public function __construct(array $options = [])
{
diff --git a/src/Intl/DisplayNamesOptions.php b/src/Intl/DisplayNamesOptions.php
index d9d4878..5dfd9a1 100644
--- a/src/Intl/DisplayNamesOptions.php
+++ b/src/Intl/DisplayNamesOptions.php
@@ -31,11 +31,11 @@
*
* @link https://tc39.es/ecma402/#sec-intl-displaynames-constructor
*
- * @psalm-type FallbackType = "code" | "none"
- * @psalm-type LanguageDisplayType = "dialect" | "standard"
- * @psalm-type StyleType = "long" | "narrow" | "short"
- * @psalm-type TypeType = "calendar" | "currency" | "dateTimeField" | "language" | "region" | "script"
- * @psalm-type OptionsType = array{fallback?: FallbackType, languageDisplay?: LanguageDisplayType, style?: StyleType, type?: TypeType}
+ * @phpstan-type FallbackType "code" | "none"
+ * @phpstan-type LanguageDisplayType "dialect" | "standard"
+ * @phpstan-type StyleType "long" | "narrow" | "short"
+ * @phpstan-type TypeType "calendar" | "currency" | "dateTimeField" | "language" | "region" | "script"
+ * @phpstan-type OptionsType array{fallback?: FallbackType, languageDisplay?: LanguageDisplayType, style?: StyleType, type?: TypeType}
*/
class DisplayNamesOptions implements JsonSerializable
{
@@ -108,7 +108,7 @@ class DisplayNamesOptions implements JsonSerializable
public ?string $type;
/**
- * @psalm-param OptionsType $options
+ * @param OptionsType $options
*/
public function __construct(array $options = [])
{
diff --git a/src/Intl/Locale.php b/src/Intl/Locale.php
index 1cc81d9..c00b393 100644
--- a/src/Intl/Locale.php
+++ b/src/Intl/Locale.php
@@ -39,11 +39,11 @@
/**
* An implementation of an ECMA-402 locale identifier
*
- * @psalm-import-type CalendarType from DateTimeFormatOptions
- * @psalm-import-type HourType from DateTimeFormatOptions
- * @psalm-import-type NumeralType from NumberFormatOptions
- * @psalm-import-type CaseFirstType from LocaleOptions
- * @psalm-import-type CollationType from LocaleOptions
+ * @phpstan-import-type CalendarType from DateTimeFormatOptions
+ * @phpstan-import-type HourType from DateTimeFormatOptions
+ * @phpstan-import-type NumeralType from NumberFormatOptions
+ * @phpstan-import-type CaseFirstType from LocaleOptions
+ * @phpstan-import-type CollationType from LocaleOptions
*/
class Locale implements LocaleInterface
{
@@ -404,9 +404,9 @@ private function numericValue(): ?string
}
/**
- * @throws InvalidArgumentException
+ * @return array{language: string | null, script: string | null, region: string | null, variants: array, keywords: array, grandfathered: string | null}
*
- * @psalm-return array{language: string | null, script: string | null, region: string | null, variants: array, keywords: array, grandfathered: string | null}
+ * @throws InvalidArgumentException
*/
private function parseLocale(string $locale): array
{
diff --git a/src/Intl/LocaleInterface.php b/src/Intl/LocaleInterface.php
index 78618d2..4a21d32 100644
--- a/src/Intl/LocaleInterface.php
+++ b/src/Intl/LocaleInterface.php
@@ -31,11 +31,11 @@
*
* @link https://tc39.es/ecma402/#locale-objects
*
- * @psalm-import-type CalendarType from DateTimeFormatOptions
- * @psalm-import-type HourType from DateTimeFormatOptions
- * @psalm-import-type NumeralType from NumberFormatOptions
- * @psalm-import-type CaseFirstType from LocaleOptions
- * @psalm-import-type CollationType from LocaleOptions
+ * @phpstan-import-type CalendarType from DateTimeFormatOptions
+ * @phpstan-import-type HourType from DateTimeFormatOptions
+ * @phpstan-import-type NumeralType from NumberFormatOptions
+ * @phpstan-import-type CaseFirstType from LocaleOptions
+ * @phpstan-import-type CollationType from LocaleOptions
*/
interface LocaleInterface
{
@@ -61,7 +61,7 @@ public function withCalendar(string $calendar): self;
/**
* Returns whether case is accounted for in this locale's collation rules
*
- * @psalm-return CaseFirstType | null
+ * @return CaseFirstType | null
*/
public function caseFirst(): ?string;
@@ -90,7 +90,7 @@ public function withCollation(string $collation): self;
/**
* Returns this locale's time-keeping convention
*
- * @psalm-return HourType | null
+ * @return HourType | null
*/
public function hourCycle(): ?string;
diff --git a/src/Intl/LocaleOptions.php b/src/Intl/LocaleOptions.php
index de3f9f6..18c44bc 100644
--- a/src/Intl/LocaleOptions.php
+++ b/src/Intl/LocaleOptions.php
@@ -26,18 +26,18 @@
/**
* Configuration options for the locale identifier
*
- * @psalm-import-type CalendarType from DateTimeFormatOptions
- * @psalm-import-type HourType from DateTimeFormatOptions
- * @psalm-import-type NumeralType from NumberFormatOptions
- * @psalm-type CaseFirstType = "upper" | "lower" | "false"
- * @psalm-type CollationType = "big5han" | "compat" | "dict" | "direct" | "ducet" | "emoji" | "eor" | "gb2312" | "phonebk" | "phonetic" | "pinyin" | "reformed" | "search" | "searchjl" | "standard" | "stroke" | "trad" | "unihan" | "zhuyin" | string
+ * @phpstan-import-type CalendarType from DateTimeFormatOptions
+ * @phpstan-import-type HourType from DateTimeFormatOptions
+ * @phpstan-import-type NumeralType from NumberFormatOptions
+ * @phpstan-type CaseFirstType "upper" | "lower" | "false"
+ * @phpstan-type CollationType "big5han" | "compat" | "dict" | "direct" | "ducet" | "emoji" | "eor" | "gb2312" | "phonebk" | "phonetic" | "pinyin" | "reformed" | "search" | "searchjl" | "standard" | "stroke" | "trad" | "unihan" | "zhuyin" | string
*/
class LocaleOptions
{
/**
* The locale's calendar era
*
- * @psalm-var CalendarType | null
+ * @var CalendarType | null
*/
public ?string $calendar = null;
@@ -45,14 +45,14 @@ class LocaleOptions
* Whether case should be accounted for in the locale's collation rules
* (i.e. `"upper"`, `"lower"`, or `"false"`)
*
- * @psalm-var CaseFirstType | null
+ * @var CaseFirstType | null
*/
public ?string $caseFirst = null;
/**
* The locale's collation type
*
- * @psalm-var CollationType | null
+ * @var CollationType | null
*/
public ?string $collation = null;
@@ -60,7 +60,7 @@ class LocaleOptions
* The locale's time-keeping convention (i.e., `"h11"`, `"h12"`, `"h23"`,
* or `"h24"`)
*
- * @psalm-var HourType | null
+ * @var HourType | null
*/
public ?string $hourCycle = null;
@@ -72,7 +72,7 @@ class LocaleOptions
/**
* The locale's numeral system
*
- * @psalm-var NumeralType | null
+ * @var NumeralType | null
*/
public ?string $numberingSystem = null;
@@ -104,9 +104,6 @@ class LocaleOptions
* handling for numeric strings
* @param string | null $region The locale's region
* @param string | null $script The locale's script used for writing
- *
- * @psalm-param "upper" | "lower" | "false" | null $caseFirst
- * @psalm-param "h11" | "h12" | "h23" | "h24" | null $hourCycle
*/
public function __construct(
?string $calendar = null,
diff --git a/src/Intl/MessageFormat.php b/src/Intl/MessageFormat.php
index b2d0211..9d983b1 100644
--- a/src/Intl/MessageFormat.php
+++ b/src/Intl/MessageFormat.php
@@ -98,6 +98,8 @@ public function format(string $pattern, array $values = []): string
}
/**
+ * @param array $values
+ *
* @throws Parser\Exception\IllegalParserUsageException
* @throws Parser\Exception\InvalidArgumentException
* @throws Parser\Exception\InvalidOffsetException
@@ -107,8 +109,6 @@ public function format(string $pattern, array $values = []): string
* @throws Parser\Exception\UnableToParseMessageException
* @throws UnableToFormatMessageException
* @throws CollectionMismatchException
- *
- * @psalm-param array $values
*/
private function applyPreprocessing(string $pattern, array &$values = []): string
{
@@ -140,17 +140,15 @@ private function applyPreprocessing(string $pattern, array &$values = []): strin
assert($parsed->val instanceof Parser\Type\ElementCollection);
- /** @psalm-suppress InvalidArgument */
return (new Printer())->printAst($this->processAst($parsed->val, $callbacks, $valuesWithoutCallables));
}
/**
+ * @param array $callbacks
* @param array $values
*
* @throws CollectionMismatchException
* @throws UnableToFormatMessageException
- *
- * @psalm-param array $callbacks
*/
private function processAst(
Parser\Type\ElementCollection $ast,
@@ -191,12 +189,11 @@ private function processAst(
}
/**
+ * @param array $callbacks
* @param array $values
*
* @throws CollectionMismatchException
* @throws UnableToFormatMessageException
- *
- * @psalm-param array $callbacks
*/
private function processTagElement(
Parser\Type\TagElement $tagElement,
@@ -280,10 +277,10 @@ private function processNumberElement(
}
/**
+ * @param array $callbacks
+ *
* @throws CollectionMismatchException
* @throws UnableToFormatMessageException
- *
- * @psalm-param array $callbacks
*/
private function processLiteralElement(
Parser\Type\LiteralElement $literalElement,
diff --git a/src/Intl/MessageFormatInterface.php b/src/Intl/MessageFormatInterface.php
index 18d33c0..d79a65a 100644
--- a/src/Intl/MessageFormatInterface.php
+++ b/src/Intl/MessageFormatInterface.php
@@ -71,9 +71,9 @@ interface MessageFormatInterface
* );
* ```
*
- * @throws UnableToFormatMessageException
+ * @param array $values
*
- * @psalm-param array $values
+ * @throws UnableToFormatMessageException
*/
public function format(string $pattern, array $values = []): string;
}
diff --git a/src/Intl/NumberFormat.php b/src/Intl/NumberFormat.php
index 5ec2c21..5bdf0f8 100644
--- a/src/Intl/NumberFormat.php
+++ b/src/Intl/NumberFormat.php
@@ -44,7 +44,7 @@
/**
* Formats a number for a given locale
*
- * @psalm-import-type FractionDigitsType from NumberFormatOptions
+ * @phpstan-import-type FractionDigitsType from NumberFormatOptions
*/
class NumberFormat implements NumberFormatInterface
{
diff --git a/src/Intl/NumberFormatOptions.php b/src/Intl/NumberFormatOptions.php
index 4a90a96..b63282b 100644
--- a/src/Intl/NumberFormatOptions.php
+++ b/src/Intl/NumberFormatOptions.php
@@ -27,24 +27,24 @@
use JsonSerializable;
/**
- * @psalm-type CompactDisplayType = "short" | "long"
- * @psalm-type CurrencyDisplayType = "symbol" | "code" | "name" | "narrowSymbol"
- * @psalm-type CurrencySignType = "standard" | "accounting"
- * @psalm-type CurrencyType = non-empty-string
- * @psalm-type DigitsType = positive-int
- * @psalm-type FractionDigitsType = DigitsType | 0
- * @psalm-type NotationType = "standard" | "scientific" | "engineering" | "compact"
- * @psalm-type NumeralType = "adlm" | "ahom" | "arab" | "arabext" | "bali" | "beng" | "bhks" | "brah" | "cakm" | "cham" | "deva" | "fullwide" | "gong" | "gonm" | "gujr" | "guru" | "hanidec" | "hmng" | "java" | "kali" | "khmr" | "knda" | "lana" | "lanatham" | "laoo" | "latn" | "lepc" | "limb" | "mathbold" | "mathdbl" | "mathmono" | "mathsanb" | "mathsans" | "mlym" | "modi" | "mong" | "mroo" | "mtei" | "mymr" | "mymrshan" | "mymrtlng" | "newa" | "nkoo" | "olck" | "orya" | "osma" | "rohg" | "saur" | "shrd" | "sind" | "sora" | "sund" | "takr" | "talu" | "tamldec" | "telu" | "thai" | "tibt" | "tirh" | "vaii" | "wara" | "wcho" | non-empty-string
- * @psalm-type RoundingModeType = "ceil" | "floor" | "expand" | "trunc" | "halfCeil" | "halfFloor" | "halfExpand" | "halfTrunc" | "halfEven" | "halfOdd" | "unnecessary"
- * @psalm-type RoundingPriorityType = "auto" | "morePrecision" | "lessPrecision"
- * @psalm-type ScaleType = float
- * @psalm-type SignDisplayType = "auto" | "always" | "never" | "exceptZero" | "negative"
- * @psalm-type StyleType = "decimal" | "percent" | "currency" | "unit"
- * @psalm-type TrailingZeroDisplayType = "auto" | "stripIfInteger"
- * @psalm-type UnitDisplayType = "short" | "long" | "narrow"
- * @psalm-type UnitType = "acre" | "bit" | "byte" | "celsius" | "centimeter" | "day" | "degree" | "fahrenheit" | "fluid-ounce" | "foot" | "gallon" | "gigabit" | "gigabyte" | "gram" | "hectare" | "hour" | "inch" | "kilobit" | "kilobyte" | "kilogram" | "kilometer" | "liter" | "megabit" | "megabyte" | "meter" | "mile" | "mile-scandinavian" | "milliliter" | "millimeter" | "millisecond" | "minute" | "month" | "ounce" | "percent" | "petabyte" | "pound" | "second" | "stone" | "terabit" | "terabyte" | "week" | "yard" | "year" | non-empty-string
- * @psalm-type UseGroupingType = "always" | "auto" | "false" | "min2" | "thousands" | "true"
- * @psalm-type OptionsType = array{compactDisplay?: CompactDisplayType, currency?: CurrencyType, currencyDisplay?: CurrencyDisplayType, currencySign?: CurrencySignType, maximumFractionDigits?: FractionDigitsType, maximumSignificantDigits?: DigitsType, minimumFractionDigits?: FractionDigitsType, minimumIntegerDigits?: DigitsType, minimumSignificantDigits?: DigitsType, notation?: NotationType, numberingSystem?: NumeralType, roundingMode?: RoundingModeType, roundingPriority?: RoundingPriorityType, scale?: ScaleType, signDisplay?: SignDisplayType, style?: StyleType, trailingZeroDisplay?: TrailingZeroDisplayType, unit?: UnitType, unitDisplay?: UnitDisplayType, useGrouping?: UseGroupingType}
+ * @phpstan-type CompactDisplayType "short" | "long"
+ * @phpstan-type CurrencyDisplayType "symbol" | "code" | "name" | "narrowSymbol"
+ * @phpstan-type CurrencySignType "standard" | "accounting"
+ * @phpstan-type CurrencyType non-empty-string
+ * @phpstan-type DigitsType positive-int
+ * @phpstan-type FractionDigitsType DigitsType | 0
+ * @phpstan-type NotationType "standard" | "scientific" | "engineering" | "compact"
+ * @phpstan-type NumeralType "adlm" | "ahom" | "arab" | "arabext" | "bali" | "beng" | "bhks" | "brah" | "cakm" | "cham" | "deva" | "fullwide" | "gong" | "gonm" | "gujr" | "guru" | "hanidec" | "hmng" | "java" | "kali" | "khmr" | "knda" | "lana" | "lanatham" | "laoo" | "latn" | "lepc" | "limb" | "mathbold" | "mathdbl" | "mathmono" | "mathsanb" | "mathsans" | "mlym" | "modi" | "mong" | "mroo" | "mtei" | "mymr" | "mymrshan" | "mymrtlng" | "newa" | "nkoo" | "olck" | "orya" | "osma" | "rohg" | "saur" | "shrd" | "sind" | "sora" | "sund" | "takr" | "talu" | "tamldec" | "telu" | "thai" | "tibt" | "tirh" | "vaii" | "wara" | "wcho" | non-empty-string
+ * @phpstan-type RoundingModeType "ceil" | "floor" | "expand" | "trunc" | "halfCeil" | "halfFloor" | "halfExpand" | "halfTrunc" | "halfEven" | "halfOdd" | "unnecessary"
+ * @phpstan-type RoundingPriorityType "auto" | "morePrecision" | "lessPrecision"
+ * @phpstan-type ScaleType float
+ * @phpstan-type SignDisplayType "auto" | "always" | "never" | "exceptZero" | "negative"
+ * @phpstan-type StyleType "decimal" | "percent" | "currency" | "unit"
+ * @phpstan-type TrailingZeroDisplayType "auto" | "stripIfInteger"
+ * @phpstan-type UnitDisplayType "short" | "long" | "narrow"
+ * @phpstan-type UnitType "acre" | "bit" | "byte" | "celsius" | "centimeter" | "day" | "degree" | "fahrenheit" | "fluid-ounce" | "foot" | "gallon" | "gigabit" | "gigabyte" | "gram" | "hectare" | "hour" | "inch" | "kilobit" | "kilobyte" | "kilogram" | "kilometer" | "liter" | "megabit" | "megabyte" | "meter" | "mile" | "mile-scandinavian" | "milliliter" | "millimeter" | "millisecond" | "minute" | "month" | "ounce" | "percent" | "petabyte" | "pound" | "second" | "stone" | "terabit" | "terabyte" | "week" | "yard" | "year" | non-empty-string
+ * @phpstan-type UseGroupingType "always" | "auto" | "false" | "min2" | "thousands" | "true"
+ * @phpstan-type OptionsType array{compactDisplay?: CompactDisplayType, currency?: CurrencyType, currencyDisplay?: CurrencyDisplayType, currencySign?: CurrencySignType, maximumFractionDigits?: FractionDigitsType, maximumSignificantDigits?: DigitsType, minimumFractionDigits?: FractionDigitsType, minimumIntegerDigits?: DigitsType, minimumSignificantDigits?: DigitsType, notation?: NotationType, numberingSystem?: NumeralType, roundingMode?: RoundingModeType, roundingPriority?: RoundingPriorityType, scale?: ScaleType, signDisplay?: SignDisplayType, style?: StyleType, trailingZeroDisplay?: TrailingZeroDisplayType, unit?: UnitType, unitDisplay?: UnitDisplayType, useGrouping?: UseGroupingType}
*/
class NumberFormatOptions implements JsonSerializable
{
@@ -319,7 +319,7 @@ class NumberFormatOptions implements JsonSerializable
public ?string $useGrouping = null;
/**
- * @psalm-param OptionsType $options
+ * @param OptionsType $options
*/
public function __construct(array $options = [])
{
diff --git a/src/MessageLoader.php b/src/MessageLoader.php
index ebe9b6f..5c014de 100644
--- a/src/MessageLoader.php
+++ b/src/MessageLoader.php
@@ -50,7 +50,7 @@
/**
* Loads messages for a given locale from the file system or cache
*
- * @psalm-import-type ReaderType from ReaderInterface
+ * @phpstan-import-type ReaderType from ReaderInterface
*/
class MessageLoader
{
diff --git a/src/PseudoLocale/Converter.php b/src/PseudoLocale/Converter.php
index c374992..569d8bd 100644
--- a/src/PseudoLocale/Converter.php
+++ b/src/PseudoLocale/Converter.php
@@ -111,7 +111,6 @@ private function getPseudoLocale(string $pseudoLocale): PseudoLocaleInterface
/**
* @var class-string | null $localeClass
- * @psalm-suppress InvalidArrayOffset
*/
$localeClass = $locales[strtolower($pseudoLocale)] ?? null;
diff --git a/src/Util/FileSystemHelper.php b/src/Util/FileSystemHelper.php
index 0ab850e..fb96527 100644
--- a/src/Util/FileSystemHelper.php
+++ b/src/Util/FileSystemHelper.php
@@ -249,7 +249,6 @@ public function loadClosureFromScript(string $path): ?Closure
/**
* @var Closure | callable | int $closure
- * @psalm-suppress UnresolvableInclude
*/
$closure = @include $path;
diff --git a/src/Util/FormatHelper.php b/src/Util/FormatHelper.php
index 1bb78e3..a23574d 100644
--- a/src/Util/FormatHelper.php
+++ b/src/Util/FormatHelper.php
@@ -54,10 +54,10 @@
/**
* Utilities for format readers and writers
*
- * @psalm-import-type ReaderCallableType from ReaderInterface
- * @psalm-import-type ReaderType from ReaderInterface
- * @psalm-import-type WriterCallableType from WriterInterface
- * @psalm-import-type WriterType from WriterInterface
+ * @phpstan-import-type ReaderCallableType from ReaderInterface
+ * @phpstan-import-type ReaderType from ReaderInterface
+ * @phpstan-import-type WriterCallableType from WriterInterface
+ * @phpstan-import-type WriterType from WriterInterface
*/
class FormatHelper
{
@@ -141,7 +141,6 @@ public function getWriter(?string $format): callable
private function loadFormatter(string $format, string $type): callable
{
if (class_exists($format) && is_a($format, $type, true)) {
- /** @psalm-suppress MixedMethodCall */
return new $format();
}
@@ -160,8 +159,6 @@ private function loadFormatter(string $format, string $type): callable
* @return ReaderCallableType
*
* @throws InvalidArgumentException
- *
- * @psalm-suppress UndefinedMethod, PossiblyNullReference
*/
public function validateReaderCallable(?callable $formatter): callable
{
@@ -197,8 +194,6 @@ public function validateReaderCallable(?callable $formatter): callable
* @return WriterCallableType
*
* @throws InvalidArgumentException
- *
- * @psalm-suppress UndefinedMethod, PossiblyNullReference
*/
public function validateWriterCallable(?callable $formatter): callable
{
diff --git a/tests/FormatPHPTest.php b/tests/FormatPHPTest.php
index 619fe38..dcca00d 100644
--- a/tests/FormatPHPTest.php
+++ b/tests/FormatPHPTest.php
@@ -19,7 +19,7 @@
use function date;
/**
- * @psalm-import-type OptionsType from DisplayNamesOptions
+ * @phpstan-import-type OptionsType from DisplayNamesOptions
*/
class FormatPHPTest extends TestCase
{
@@ -402,7 +402,8 @@ public function testFormatCurrencyWithOptions(): void
}
/**
- * @psalm-param OptionsType $options
+ * @param OptionsType $options
+ *
* @dataProvider formatDisplayNameProvider
*/
public function testFormatDisplayName(string $tag, string $value, array $options, ?string $expected): void
@@ -417,7 +418,7 @@ public function testFormatDisplayName(string $tag, string $value, array $options
}
/**
- * @psalm-return array
+ * @return array
*/
public function formatDisplayNameProvider(): array
{
diff --git a/tests/Icu/MessageFormat/Parser/ErrorTest.php b/tests/Icu/MessageFormat/Parser/ErrorTest.php
index 5957930..23860c5 100644
--- a/tests/Icu/MessageFormat/Parser/ErrorTest.php
+++ b/tests/Icu/MessageFormat/Parser/ErrorTest.php
@@ -11,7 +11,7 @@
use RuntimeException;
/**
- * @psalm-import-type ErrorKind from Error
+ * @phpstan-import-type ErrorKind from Error
*/
class ErrorTest extends TestCase
{
diff --git a/tests/Intl/DateTimeFormatOptionsTest.php b/tests/Intl/DateTimeFormatOptionsTest.php
index 811d5f8..0711958 100644
--- a/tests/Intl/DateTimeFormatOptionsTest.php
+++ b/tests/Intl/DateTimeFormatOptionsTest.php
@@ -11,7 +11,7 @@
use function json_encode;
/**
- * @psalm-import-type OptionsType from DateTimeFormatOptions
+ * @phpstan-import-type OptionsType from DateTimeFormatOptions
*/
class DateTimeFormatOptionsTest extends TestCase
{
@@ -129,7 +129,8 @@ public function publicConstantsProvider(): array
}
/**
- * @psalm-param OptionsType $options
+ * @param OptionsType $options
+ *
* @dataProvider constructorOptionsProvider
*/
public function testConstructorOptions(array $options): void
diff --git a/tests/Intl/DateTimeFormatTest.php b/tests/Intl/DateTimeFormatTest.php
index 3e82042..3f990b7 100644
--- a/tests/Intl/DateTimeFormatTest.php
+++ b/tests/Intl/DateTimeFormatTest.php
@@ -16,7 +16,7 @@
use function date_default_timezone_set;
/**
- * @psalm-import-type OptionsType from DateTimeFormatOptions
+ * @phpstan-import-type OptionsType from DateTimeFormatOptions
*/
class DateTimeFormatTest extends TestCase
{
@@ -43,7 +43,8 @@ protected function tearDown(): void
}
/**
- * @psalm-param OptionsType $options
+ * @param OptionsType $options
+ *
* @dataProvider formatProvider
*/
public function testFormat(array $options, string $ko, string $en, string $skeleton, bool $skip = false): void
@@ -82,7 +83,8 @@ public function testUnknownTimeZoneThrowsException(): void
}
/**
- * @psalm-param OptionsType $additionalOptions
+ * @param OptionsType $additionalOptions
+ *
* @dataProvider formatThrowsExceptionWhenDateStyleOrTimeStyleMixedWithStylePropertyProvider
*/
public function testFormatThrowsExceptionWhenDateStyleOrTimeStyleMixedWithStyleProperty(
diff --git a/tests/Intl/DisplayNames/OfTest.php b/tests/Intl/DisplayNames/OfTest.php
index aa6edfa..a62138b 100644
--- a/tests/Intl/DisplayNames/OfTest.php
+++ b/tests/Intl/DisplayNames/OfTest.php
@@ -11,7 +11,7 @@
use FormatPHP\Test\TestCase;
/**
- * @psalm-import-type OptionsType from DisplayNamesOptions
+ * @phpstan-import-type OptionsType from DisplayNamesOptions
*/
class OfTest extends TestCase
{
diff --git a/tests/Intl/DisplayNamesOptionsTest.php b/tests/Intl/DisplayNamesOptionsTest.php
index 298f3d9..66cc0cd 100644
--- a/tests/Intl/DisplayNamesOptionsTest.php
+++ b/tests/Intl/DisplayNamesOptionsTest.php
@@ -11,7 +11,7 @@
use function json_encode;
/**
- * @psalm-import-type OptionsType from DisplayNamesOptions
+ * @phpstan-import-type OptionsType from DisplayNamesOptions
*/
class DisplayNamesOptionsTest extends TestCase
{
@@ -89,7 +89,8 @@ public function publicConstantsProvider(): array
}
/**
- * @psalm-param OptionsType $options
+ * @param OptionsType $options
+ *
* @dataProvider constructorOptionsProvider
*/
public function testConstructorOptions(array $options): void
diff --git a/tests/Intl/DisplayNamesTest.php b/tests/Intl/DisplayNamesTest.php
index d283349..d7001a6 100644
--- a/tests/Intl/DisplayNamesTest.php
+++ b/tests/Intl/DisplayNamesTest.php
@@ -13,7 +13,8 @@
class DisplayNamesTest extends TestCase
{
/**
- * @psalm-param "region" | "script" $type
+ * @param "region" | "script" $type
+ *
* @dataProvider invalidValueProvider
*/
public function testThrowsExceptionForInvalidValue(string $code, string $type): void
diff --git a/tests/Intl/MessageFormatTest.php b/tests/Intl/MessageFormatTest.php
index fb1c648..90ffd5b 100644
--- a/tests/Intl/MessageFormatTest.php
+++ b/tests/Intl/MessageFormatTest.php
@@ -20,7 +20,7 @@
use FormatPHP\Util\DescriptorIdBuilder;
/**
- * @psalm-import-type MessageValuesType from FormatterInterface
+ * @phpstan-import-type MessageValuesType from FormatterInterface
*/
class MessageFormatTest extends TestCase
{
diff --git a/tests/Intl/NumberFormat/CurrencyTest.php b/tests/Intl/NumberFormat/CurrencyTest.php
index c409cc0..2937096 100644
--- a/tests/Intl/NumberFormat/CurrencyTest.php
+++ b/tests/Intl/NumberFormat/CurrencyTest.php
@@ -10,7 +10,7 @@
use FormatPHP\Test\TestCase;
/**
- * @psalm-import-type OptionsType from NumberFormatOptions
+ * @phpstan-import-type OptionsType from NumberFormatOptions
*/
class CurrencyTest extends TestCase
{
diff --git a/tests/Intl/NumberFormat/DecimalTest.php b/tests/Intl/NumberFormat/DecimalTest.php
index 19fb704..0251bd1 100644
--- a/tests/Intl/NumberFormat/DecimalTest.php
+++ b/tests/Intl/NumberFormat/DecimalTest.php
@@ -10,7 +10,7 @@
use FormatPHP\Test\TestCase;
/**
- * @psalm-import-type OptionsType from NumberFormatOptions
+ * @phpstan-import-type OptionsType from NumberFormatOptions
*/
class DecimalTest extends TestCase
{
diff --git a/tests/Intl/NumberFormat/PercentTest.php b/tests/Intl/NumberFormat/PercentTest.php
index 8480daf..62daf5f 100644
--- a/tests/Intl/NumberFormat/PercentTest.php
+++ b/tests/Intl/NumberFormat/PercentTest.php
@@ -15,7 +15,7 @@
*
* @link https://github.com/formatjs/formatjs/blob/78d35580ccd31f143bc1f3884326ecfe234c6929/packages/intl-numberformat/tests/percent.test.ts
*
- * @psalm-import-type OptionsType from NumberFormatOptions
+ * @phpstan-import-type OptionsType from NumberFormatOptions
*/
class PercentTest extends TestCase
{
diff --git a/tests/Intl/NumberFormat/UnitTest.php b/tests/Intl/NumberFormat/UnitTest.php
index 882344d..3e9af48 100644
--- a/tests/Intl/NumberFormat/UnitTest.php
+++ b/tests/Intl/NumberFormat/UnitTest.php
@@ -10,7 +10,7 @@
use FormatPHP\Test\TestCase;
/**
- * @psalm-import-type OptionsType from NumberFormatOptions
+ * @phpstan-import-type OptionsType from NumberFormatOptions
*/
class UnitTest extends TestCase
{
diff --git a/tests/Intl/NumberFormatOptionsTest.php b/tests/Intl/NumberFormatOptionsTest.php
index dd01ee9..8f2c08c 100644
--- a/tests/Intl/NumberFormatOptionsTest.php
+++ b/tests/Intl/NumberFormatOptionsTest.php
@@ -11,7 +11,7 @@
use function json_encode;
/**
- * @psalm-import-type OptionsType from NumberFormatOptions
+ * @phpstan-import-type OptionsType from NumberFormatOptions
*/
class NumberFormatOptionsTest extends TestCase
{
@@ -24,7 +24,8 @@ public function testPublicConstants(string $constantName, string $expectedValue)
}
/**
- * @psalm-param OptionsType $options
+ * @param OptionsType $options
+ *
* @dataProvider constructorOptionsProvider
*/
public function testConstructorOptions(array $options): void
diff --git a/tests/Intl/NumberFormatTest.php b/tests/Intl/NumberFormatTest.php
index 1f36fd9..daafabc 100644
--- a/tests/Intl/NumberFormatTest.php
+++ b/tests/Intl/NumberFormatTest.php
@@ -12,8 +12,8 @@
use FormatPHP\Test\TestCase;
/**
- * @psalm-import-type OptionsType from NumberFormatOptions
- * @psalm-import-type RoundingModeType from NumberFormatOptions
+ * @phpstan-import-type OptionsType from NumberFormatOptions
+ * @phpstan-import-type RoundingModeType from NumberFormatOptions
*/
class NumberFormatTest extends TestCase
{
@@ -123,8 +123,8 @@ public function testEvaluatedLocaleWithOptions(): void
/**
* @param int | float $number
+ * @param OptionsType $options
*
- * @psalm-param OptionsType $options
* @dataProvider formatProvider
*/
public function testFormat($number, string $locale, array $options, string $expected, string $skeleton): void
diff --git a/tests/MessageLoaderTest.php b/tests/MessageLoaderTest.php
index bdc9e92..58b0e8f 100644
--- a/tests/MessageLoaderTest.php
+++ b/tests/MessageLoaderTest.php
@@ -17,7 +17,7 @@
use function sprintf;
/**
- * @psalm-import-type ReaderType from ReaderInterface
+ * @phpstan-import-type ReaderType from ReaderInterface
*/
class MessageLoaderTest extends TestCase
{
From 3e6604d6765fe2730565b457d524143b60d5bdeb Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Wed, 14 May 2025 23:07:17 -0500
Subject: [PATCH 12/21] chore(deps-dev): bump dependencies not requiring
changes
---
composer.json | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/composer.json b/composer.json
index 82f2d3d..35e25f7 100644
--- a/composer.json
+++ b/composer.json
@@ -30,23 +30,23 @@
"webmozart/glob": "^4.4"
},
"require-dev": {
- "captainhook/captainhook": "^5.10",
+ "captainhook/captainhook": "^5.25",
"captainhook/plugin-composer": "^5.3",
- "ergebnis/composer-normalize": "^2.25",
- "hamcrest/hamcrest-php": "^2.0",
+ "ergebnis/composer-normalize": "^2.47",
+ "hamcrest/hamcrest-php": "^2.1",
"mdwheele/zalgo": "^0.3.1",
"mockery/mockery": "^1.6.6",
- "myclabs/deep-copy": "^1.11",
+ "myclabs/deep-copy": "^1.13",
"php-parallel-lint/php-console-highlighter": "^1.0",
- "php-parallel-lint/php-parallel-lint": "^1.3",
- "phpstan/extension-installer": "^1.1",
+ "php-parallel-lint/php-parallel-lint": "^1.4",
+ "phpstan/extension-installer": "^1.4",
"phpstan/phpstan": "^1.10.30",
"phpstan/phpstan-mockery": "^1.0",
"phpstan/phpstan-phpunit": "^1.1",
"phpunit/phpunit": "^9.0",
- "ramsey/coding-standard": "^2.0.3",
+ "ramsey/coding-standard": "^2.3",
"ramsey/composer-repl": "^1.4",
- "ramsey/conventional-commits": "^1.3",
+ "ramsey/conventional-commits": "^1.6",
"roave/security-advisories": "dev-latest",
"spatie/phpunit-snapshot-assertions": "^4.2"
},
From c97ae75a58041def0466913a03a7a80ef1793d64 Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Thu, 15 May 2025 00:11:47 -0500
Subject: [PATCH 13/21] chore(deps): bump nikic/php-parser and PHPUnit to newer
versions
---
composer.json | 8 ++--
phpunit.xml.dist | 9 ++--
.../Descriptor/DescriptorCollectorVisitor.php | 2 +-
src/Extractor/Parser/Descriptor/PhpParser.php | 29 ++++---------
tests/Console/Command/ExtractCommandTest.php | 2 +-
tests/Extractor/IdInterpolatorTest.php | 7 ++--
tests/Extractor/MessageExtractorTest.php | 10 +++--
.../Parser/Descriptor/PhpParserTest.php | 2 +-
tests/FormatPHPTest.php | 6 +--
tests/Icu/MessageFormat/ManipulatorTest.php | 7 ++--
.../Parser/DateTimeSkeletonParserTest.php | 7 ++--
tests/Icu/MessageFormat/Parser/ErrorTest.php | 6 +--
.../Parser/NumberSkeletonParserTest.php | 7 ++--
.../Parser/Util/CodePointHelperTest.php | 31 +++++---------
tests/Icu/MessageFormat/ParserTest.php | 19 ++++-----
tests/Icu/MessageFormat/PrinterTest.php | 8 ++--
tests/Intl/DateTimeFormatOptionsTest.php | 16 +++-----
tests/Intl/DateTimeFormatTest.php | 11 +++--
tests/Intl/DisplayNamesOptionsTest.php | 16 +++-----
tests/Intl/DisplayNamesTest.php | 12 +++---
tests/Intl/MessageFormatTest.php | 6 +--
tests/Intl/NumberFormatOptionsTest.php | 12 +++---
tests/Intl/NumberFormatTest.php | 24 ++++++-----
tests/MessageLoaderTest.php | 6 +--
tests/PseudoLocale/ConverterTest.php | 7 ++--
.../Locale/AbstractLocaleTest.php | 7 ++--
tests/Util/FileSystemHelperTest.php | 7 ++--
tests/Util/FormatHelperTest.php | 41 ++++++++-----------
28 files changed, 139 insertions(+), 186 deletions(-)
diff --git a/composer.json b/composer.json
index 35e25f7..a0c88a6 100644
--- a/composer.json
+++ b/composer.json
@@ -21,7 +21,7 @@
"ext-json": "*",
"ext-mbstring": "*",
"myclabs/php-enum": "^1.8.4",
- "nikic/php-parser": "^4.13",
+ "nikic/php-parser": "^5.4",
"psr/log": "^1 || ^2",
"ramsey/collection": "^1.2",
"symfony/console": "^5.3 || ^6.0",
@@ -43,12 +43,12 @@
"phpstan/phpstan": "^1.10.30",
"phpstan/phpstan-mockery": "^1.0",
"phpstan/phpstan-phpunit": "^1.1",
- "phpunit/phpunit": "^9.0",
+ "phpunit/phpunit": "^11.5",
"ramsey/coding-standard": "^2.3",
- "ramsey/composer-repl": "^1.4",
+ "ramsey/composer-repl": "^1.5",
"ramsey/conventional-commits": "^1.6",
"roave/security-advisories": "dev-latest",
- "spatie/phpunit-snapshot-assertions": "^4.2"
+ "spatie/phpunit-snapshot-assertions": "^5.2"
},
"replace": {
"skillshare/formatphp": "<=1.0.2"
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index fc55737..1bc8761 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -2,9 +2,8 @@
+ cacheDirectory="./build/cache/phpunit">
@@ -12,11 +11,13 @@
-
+
+
+
./src
-
+
diff --git a/src/Extractor/Parser/Descriptor/DescriptorCollectorVisitor.php b/src/Extractor/Parser/Descriptor/DescriptorCollectorVisitor.php
index 1c7ca56..30c5fd3 100644
--- a/src/Extractor/Parser/Descriptor/DescriptorCollectorVisitor.php
+++ b/src/Extractor/Parser/Descriptor/DescriptorCollectorVisitor.php
@@ -218,7 +218,7 @@ private function parseDescriptorProperties(Node\Expr\Array_ $descriptor): array
return $properties;
}
- private function isValidDescriptorItem(?Node\Expr\ArrayItem $item): bool
+ private function isValidDescriptorItem(?Node\ArrayItem $item): bool
{
return $item !== null
&& $item->key instanceof Node\Scalar\String_
diff --git a/src/Extractor/Parser/Descriptor/PhpParser.php b/src/Extractor/Parser/Descriptor/PhpParser.php
index 525409d..a946d75 100644
--- a/src/Extractor/Parser/Descriptor/PhpParser.php
+++ b/src/Extractor/Parser/Descriptor/PhpParser.php
@@ -34,12 +34,11 @@
use FormatPHP\Icu\MessageFormat\Parser;
use FormatPHP\Util\FileSystemHelper;
use LogicException;
-use PhpParser\Lexer;
-use PhpParser\Lexer\Emulative;
use PhpParser\Node;
use PhpParser\NodeTraverser;
use PhpParser\NodeVisitor\CloningVisitor;
-use PhpParser\Parser\Php7 as Php7Parser;
+use PhpParser\Parser as NikicParser;
+use PhpParser\ParserFactory;
use PhpParser\PrettyPrinter\Standard as PhpPrinter;
use function assert;
@@ -57,18 +56,6 @@ class PhpParser implements DescriptorParserInterface
{
private const PHP_PATH_EXTENSIONS = ['php', 'phtml'];
- private const LEXER_OPTIONS = [
- 'usedAttributes' => [
- 'comments',
- 'endFilePos',
- 'endLine',
- 'endTokenPos',
- 'startFilePos',
- 'startLine',
- 'startTokenPos',
- ],
- ];
-
private FileSystemHelper $fileSystemHelper;
public function __construct(FileSystemHelper $fileSystemHelper)
@@ -96,8 +83,7 @@ public function __invoke(
return new DescriptorCollection();
}
- $lexer = new Emulative(self::LEXER_OPTIONS);
- $parser = new Php7Parser($lexer);
+ $parser = (new ParserFactory())->createForNewestSupportedVersion();
$statements = $parser->parse($fileContents);
$descriptorCollector = new DescriptorCollectorVisitor(
@@ -117,7 +103,7 @@ public function __invoke(
assert($statements !== null);
if ($options->addGeneratedIdsToSourceCode) {
- $this->traverseWithUpdate($filePath, $statements, $lexer, $descriptorCollector, $pragmaCollector);
+ $this->traverseWithUpdate($filePath, $statements, $parser, $descriptorCollector, $pragmaCollector);
} else {
$this->traverseWithoutUpdate($statements, $descriptorCollector, $pragmaCollector);
}
@@ -152,14 +138,13 @@ private function traverseWithoutUpdate(
private function traverseWithUpdate(
string $filePath,
array $originalStatements,
- Lexer $lexer,
+ NikicParser $parser,
DescriptorCollectorVisitor $descriptorCollector,
?PragmaCollectorVisitor $pragmaCollector
): void {
- $originalTokens = $lexer->getTokens();
+ $originalTokens = $parser->getTokens();
- $cloningTraverser = new NodeTraverser();
- $cloningTraverser->addVisitor(new CloningVisitor());
+ $cloningTraverser = new NodeTraverser(new CloningVisitor());
$clonedStatements = $cloningTraverser->traverse($originalStatements);
$modifyingTraverser = new NodeTraverser();
diff --git a/tests/Console/Command/ExtractCommandTest.php b/tests/Console/Command/ExtractCommandTest.php
index 416e6d7..1c5f797 100644
--- a/tests/Console/Command/ExtractCommandTest.php
+++ b/tests/Console/Command/ExtractCommandTest.php
@@ -68,7 +68,7 @@ public function testExecuteWithValidation(): void
$errorOutput,
);
$this->assertStringContainsString(
- '96 Descriptor argument must have at least one of id, defaultMessage, or',
+ '97 Descriptor argument must have at least one of id, defaultMessage, or',
$errorOutput,
);
$this->assertStringContainsString(
diff --git a/tests/Extractor/IdInterpolatorTest.php b/tests/Extractor/IdInterpolatorTest.php
index c177986..dfaa365 100644
--- a/tests/Extractor/IdInterpolatorTest.php
+++ b/tests/Extractor/IdInterpolatorTest.php
@@ -10,12 +10,11 @@
use FormatPHP\Exception\UnableToGenerateMessageIdException;
use FormatPHP\Extractor\IdInterpolator;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
class IdInterpolatorTest extends TestCase
{
- /**
- * @dataProvider generateIdProvider
- */
+ #[DataProvider('generateIdProvider')]
public function testGenerateId(DescriptorInterface $descriptor, ?string $pattern, string $expectedId): void
{
$idInterpolator = new IdInterpolator();
@@ -30,7 +29,7 @@ public function testGenerateId(DescriptorInterface $descriptor, ?string $pattern
/**
* @return array
*/
- public function generateIdProvider(): array
+ public static function generateIdProvider(): array
{
return [
'descriptor has ID' => [
diff --git a/tests/Extractor/MessageExtractorTest.php b/tests/Extractor/MessageExtractorTest.php
index d430f2a..4947ecb 100644
--- a/tests/Extractor/MessageExtractorTest.php
+++ b/tests/Extractor/MessageExtractorTest.php
@@ -610,7 +610,7 @@ public function testProcessWithCustomParser(): void
. 'encountered Expr_Variable in ' . __DIR__
. '/Parser/Descriptor/fixtures/php-parser-10.php on line 6',
'The descriptor must not contain values other than string literals; '
- . 'encountered Scalar_Encapsed in ' . __DIR__
+ . 'encountered Scalar_InterpolatedString in ' . __DIR__
. '/Parser/Descriptor/fixtures/php-parser-10.php on line 12',
'Missing "defaultMessage" in "{{#formatMessage |idWithoutMessage}}{{/formatMessage}}" in '
. __DIR__ . '/Parser/Descriptor/fixtures/custom-parser-01.template on line 0',
@@ -702,7 +702,7 @@ public function testProcessWithCustomParserAsClosure(): void
. 'encountered Expr_Variable in ' . __DIR__
. '/Parser/Descriptor/fixtures/php-parser-10.php on line 6',
'The descriptor must not contain values other than string literals; '
- . 'encountered Scalar_Encapsed in ' . __DIR__
+ . 'encountered Scalar_InterpolatedString in ' . __DIR__
. '/Parser/Descriptor/fixtures/php-parser-10.php on line 12',
'Missing "defaultMessage" in "{{#formatMessage |idWithoutMessage}}{{/formatMessage}}" in '
. __DIR__ . '/Parser/Descriptor/fixtures/custom-parser-01.template on line 0',
@@ -896,7 +896,11 @@ public function testProcessValidate(): void
],
__DIR__ . '/Parser/Descriptor/fixtures/php-parser-10.php' => [
[6, 'The descriptor must not contain values other than string literals; encountered Expr_Variable'],
- [12, 'The descriptor must not contain values other than string literals; encountered Scalar_Encapsed'],
+ [
+ 12,
+ 'The descriptor must not contain values other than string literals; '
+ . 'encountered Scalar_InterpolatedString',
+ ],
],
__DIR__ . '/../fixtures/invalid-message.php' => [
[4, 'Syntax Error: INVALID_TAG in message "This is a default message "'],
diff --git a/tests/Extractor/Parser/Descriptor/PhpParserTest.php b/tests/Extractor/Parser/Descriptor/PhpParserTest.php
index 1e98fe6..65274e7 100644
--- a/tests/Extractor/Parser/Descriptor/PhpParserTest.php
+++ b/tests/Extractor/Parser/Descriptor/PhpParserTest.php
@@ -385,7 +385,7 @@ public function testParse10(): void
. 'encountered Expr_Variable on line 6 in '
. __DIR__ . '/fixtures/php-parser-10.php',
'The descriptor must not contain values other than string literals; '
- . 'encountered Scalar_Encapsed on line 12 in '
+ . 'encountered Scalar_InterpolatedString on line 12 in '
. __DIR__ . '/fixtures/php-parser-10.php',
],
$receivedErrors,
diff --git a/tests/FormatPHPTest.php b/tests/FormatPHPTest.php
index dcca00d..54640de 100644
--- a/tests/FormatPHPTest.php
+++ b/tests/FormatPHPTest.php
@@ -15,6 +15,7 @@
use FormatPHP\Message;
use FormatPHP\MessageCollection;
use Locale as PhpLocale;
+use PHPUnit\Framework\Attributes\DataProvider;
use function date;
@@ -403,9 +404,8 @@ public function testFormatCurrencyWithOptions(): void
/**
* @param OptionsType $options
- *
- * @dataProvider formatDisplayNameProvider
*/
+ #[DataProvider('formatDisplayNameProvider')]
public function testFormatDisplayName(string $tag, string $value, array $options, ?string $expected): void
{
$locale = new Locale($tag);
@@ -420,7 +420,7 @@ public function testFormatDisplayName(string $tag, string $value, array $options
/**
* @return array
*/
- public function formatDisplayNameProvider(): array
+ public static function formatDisplayNameProvider(): array
{
return [
[
diff --git a/tests/Icu/MessageFormat/ManipulatorTest.php b/tests/Icu/MessageFormat/ManipulatorTest.php
index b264c5b..581dda8 100644
--- a/tests/Icu/MessageFormat/ManipulatorTest.php
+++ b/tests/Icu/MessageFormat/ManipulatorTest.php
@@ -8,14 +8,13 @@
use FormatPHP\Icu\MessageFormat\Parser;
use FormatPHP\Icu\MessageFormat\Printer;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
use function assert;
class ManipulatorTest extends TestCase
{
- /**
- * @dataProvider messageProvider
- */
+ #[DataProvider('messageProvider')]
public function testHoistSelectors(string $message): void
{
$parser = new Parser($message);
@@ -34,7 +33,7 @@ public function testHoistSelectors(string $message): void
/**
* @return array
*/
- public function messageProvider(): array
+ public static function messageProvider(): array
{
return [
'should hoist 1 plural' => [
diff --git a/tests/Icu/MessageFormat/Parser/DateTimeSkeletonParserTest.php b/tests/Icu/MessageFormat/Parser/DateTimeSkeletonParserTest.php
index c73a9d1..dc0be41 100644
--- a/tests/Icu/MessageFormat/Parser/DateTimeSkeletonParserTest.php
+++ b/tests/Icu/MessageFormat/Parser/DateTimeSkeletonParserTest.php
@@ -6,6 +6,7 @@
use FormatPHP\Icu\MessageFormat\Parser\DateTimeSkeletonParser;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
use function json_encode;
@@ -23,9 +24,7 @@ class DateTimeSkeletonParserTest extends TestCase
| JSON_UNESCAPED_SLASHES
| JSON_THROW_ON_ERROR;
- /**
- * @dataProvider dateTimeSkeletonProvider
- */
+ #[DataProvider('dateTimeSkeletonProvider')]
public function testParseDateTimeSkeleton(string $skeleton): void
{
$parser = new DateTimeSkeletonParser();
@@ -37,7 +36,7 @@ public function testParseDateTimeSkeleton(string $skeleton): void
/**
* @return array
*/
- public function dateTimeSkeletonProvider(): array
+ public static function dateTimeSkeletonProvider(): array
{
return [
["yyyy.MM.dd G 'at' HH:mm:ss zzzz"],
diff --git a/tests/Icu/MessageFormat/Parser/ErrorTest.php b/tests/Icu/MessageFormat/Parser/ErrorTest.php
index 23860c5..6f4032d 100644
--- a/tests/Icu/MessageFormat/Parser/ErrorTest.php
+++ b/tests/Icu/MessageFormat/Parser/ErrorTest.php
@@ -8,6 +8,7 @@
use FormatPHP\Icu\MessageFormat\Parser\Type\Location;
use FormatPHP\Icu\MessageFormat\Parser\Type\LocationDetails;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
use RuntimeException;
/**
@@ -74,9 +75,8 @@ public function testConstructorAcceptsThrowable(): void
/**
* @param ErrorKind $kind
- *
- * @dataProvider provideErrorKind
*/
+ #[DataProvider('provideErrorKind')]
public function testGetErrorKindName(int $kind, string $expected): void
{
$start = new LocationDetails(0, 1, 1);
@@ -91,7 +91,7 @@ public function testGetErrorKindName(int $kind, string $expected): void
/**
* @return array
*/
- public function provideErrorKind(): array
+ public static function provideErrorKind(): array
{
return [
['kind' => 0, 'expected' => 'OTHER'],
diff --git a/tests/Icu/MessageFormat/Parser/NumberSkeletonParserTest.php b/tests/Icu/MessageFormat/Parser/NumberSkeletonParserTest.php
index 1d1aa00..5091028 100644
--- a/tests/Icu/MessageFormat/Parser/NumberSkeletonParserTest.php
+++ b/tests/Icu/MessageFormat/Parser/NumberSkeletonParserTest.php
@@ -6,6 +6,7 @@
use FormatPHP\Icu\MessageFormat\Parser\NumberSkeletonParser;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
use function json_encode;
@@ -23,9 +24,7 @@ class NumberSkeletonParserTest extends TestCase
| JSON_UNESCAPED_SLASHES
| JSON_THROW_ON_ERROR;
- /**
- * @dataProvider numberSkeletonProvider
- */
+ #[DataProvider('numberSkeletonProvider')]
public function testParseNumberSkeleton(string $skeleton): void
{
$parser = new NumberSkeletonParser();
@@ -39,7 +38,7 @@ public function testParseNumberSkeleton(string $skeleton): void
/**
* @return array
*/
- public function numberSkeletonProvider(): array
+ public static function numberSkeletonProvider(): array
{
return [
['percent .##'],
diff --git a/tests/Icu/MessageFormat/Parser/Util/CodePointHelperTest.php b/tests/Icu/MessageFormat/Parser/Util/CodePointHelperTest.php
index 15fc9f5..ffca744 100644
--- a/tests/Icu/MessageFormat/Parser/Util/CodePointHelperTest.php
+++ b/tests/Icu/MessageFormat/Parser/Util/CodePointHelperTest.php
@@ -7,6 +7,7 @@
use FormatPHP\Icu\MessageFormat\Parser\Exception\InvalidUtf8CodePointException;
use FormatPHP\Icu\MessageFormat\Parser\Util\CodePointHelper;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
use function mb_ord;
use function range;
@@ -23,9 +24,7 @@ protected function setUp(): void
$this->codePointHelper = new CodePointHelper();
}
- /**
- * @dataProvider isAlphaProvider
- */
+ #[DataProvider('isAlphaProvider')]
public function testIsAlpha(int $value, bool $expected): void
{
$this->assertSame($expected, $this->codePointHelper->isAlpha($value));
@@ -34,7 +33,7 @@ public function testIsAlpha(int $value, bool $expected): void
/**
* @return non-empty-list
*/
- public function isAlphaProvider(): array
+ public static function isAlphaProvider(): array
{
$values = [];
@@ -57,9 +56,7 @@ public function isAlphaProvider(): array
return $values;
}
- /**
- * @dataProvider isAlphaOrSlashProvider
- */
+ #[DataProvider('isAlphaOrSlashProvider')]
public function testIsAlphaOrSlash(int $value, bool $expected): void
{
$this->assertSame($expected, $this->codePointHelper->isAlphaOrSlash($value));
@@ -68,7 +65,7 @@ public function testIsAlphaOrSlash(int $value, bool $expected): void
/**
* @return non-empty-list
*/
- public function isAlphaOrSlashProvider(): array
+ public static function isAlphaOrSlashProvider(): array
{
return [
[mb_ord('a', 'UTF-8'), true],
@@ -83,9 +80,7 @@ public function isAlphaOrSlashProvider(): array
];
}
- /**
- * @dataProvider isWhiteSpaceProvider
- */
+ #[DataProvider('isWhiteSpaceProvider')]
public function testIsWhiteSpace(int $value, bool $expected): void
{
$this->assertSame($expected, $this->codePointHelper->isWhiteSpace($value));
@@ -94,7 +89,7 @@ public function testIsWhiteSpace(int $value, bool $expected): void
/**
* @return non-empty-list
*/
- public function isWhiteSpaceProvider(): array
+ public static function isWhiteSpaceProvider(): array
{
return [
[0x0009, true],
@@ -132,9 +127,7 @@ public function isWhiteSpaceProvider(): array
];
}
- /**
- * @dataProvider isPatternSyntaxProvider
- */
+ #[DataProvider('isPatternSyntaxProvider')]
public function testIsPatternSyntax(int $value, bool $expected): void
{
$this->assertSame($expected, $this->codePointHelper->isPatternSyntax($value));
@@ -143,7 +136,7 @@ public function testIsPatternSyntax(int $value, bool $expected): void
/**
* @return non-empty-list
*/
- public function isPatternSyntaxProvider(): array
+ public static function isPatternSyntaxProvider(): array
{
$values = [];
@@ -158,9 +151,7 @@ public function isPatternSyntaxProvider(): array
return $values;
}
- /**
- * @dataProvider isPotentialElementNameCharProvider
- */
+ #[DataProvider('isPotentialElementNameCharProvider')]
public function testIsPotentialElementNameChar(int $value, bool $expected): void
{
$this->assertSame($expected, $this->codePointHelper->isPotentialElementNameChar($value));
@@ -169,7 +160,7 @@ public function testIsPotentialElementNameChar(int $value, bool $expected): void
/**
* @return non-empty-list
*/
- public function isPotentialElementNameCharProvider(): array
+ public static function isPotentialElementNameCharProvider(): array
{
$values = [];
diff --git a/tests/Icu/MessageFormat/ParserTest.php b/tests/Icu/MessageFormat/ParserTest.php
index 5c51b28..7c47a90 100644
--- a/tests/Icu/MessageFormat/ParserTest.php
+++ b/tests/Icu/MessageFormat/ParserTest.php
@@ -8,6 +8,7 @@
use FormatPHP\Icu\MessageFormat\Parser\Exception\IllegalParserUsageException;
use FormatPHP\Icu\MessageFormat\Parser\Options;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
use function json_encode;
@@ -25,9 +26,7 @@ class ParserTest extends TestCase
| JSON_UNESCAPED_SLASHES
| JSON_THROW_ON_ERROR;
- /**
- * @dataProvider parserProvider
- */
+ #[DataProvider('parserProvider')]
public function testParser(string $message, ?Options $options = null): void
{
$parser = new Parser($message, $options);
@@ -36,9 +35,7 @@ public function testParser(string $message, ?Options $options = null): void
$this->assertMatchesJsonSnapshot($parsed);
}
- /**
- * @dataProvider numberSkeletonProvider
- */
+ #[DataProvider('numberSkeletonProvider')]
public function testNumberSkeleton(string $skeleton): void
{
$message = "{0, number, ::$skeleton}";
@@ -73,7 +70,7 @@ public function testParserCannotRunMoreThanOnce(): void
*
* @return array
*/
- public function parserProvider(): array
+ public static function parserProvider(): array
{
return [
'basic_argument_1' => ['message' => '{a}'],
@@ -238,8 +235,8 @@ public function parserProvider(): array
'quoted_string_3' => ['message' => "aaa'{'"],
'quoted_string_4' => ['message' => "aaa'}'"],
'quoted_string_5' => [
- // See: https://unicode-org.github.io/icu/userguide/format_parse/messages/#quotingescaping
- // See: https://github.com/formatjs/formatjs/issues/97
+ // See: https://unicode-org.github.io/icu/userguide/format_parse/messages/#quotingescaping
+ // See: https://github.com/formatjs/formatjs/issues/97
'message' => "This '{isn''t}' obvious",
],
'quoted_tag_1' => ['message' => "'"],
@@ -275,7 +272,7 @@ public function parserProvider(): array
'simple_number_arg_1' => ['message' => 'I have {numCats, number} cats.'],
'time_arg_skeleton_1' => ['message' => '{0, time, ::h:mm a}'],
'treat_unicode_nbsp_as_whitespace' => [
- // phpcs:ignore SlevomatCodingStandard.PHP.RequireNowdoc.RequiredNowdoc
+ // phpcs:ignore SlevomatCodingStandard.PHP.RequireNowdoc.RequiredNowdoc
'message' => <<
*/
- public function numberSkeletonProvider(): array
+ public static function numberSkeletonProvider(): array
{
return [
'number_skeleton_1' => ['compact-short currency/GBP'],
diff --git a/tests/Icu/MessageFormat/PrinterTest.php b/tests/Icu/MessageFormat/PrinterTest.php
index 00138aa..1f30d79 100644
--- a/tests/Icu/MessageFormat/PrinterTest.php
+++ b/tests/Icu/MessageFormat/PrinterTest.php
@@ -8,12 +8,11 @@
use FormatPHP\Icu\MessageFormat\Parser\Options;
use FormatPHP\Icu\MessageFormat\Printer;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
class PrinterTest extends TestCase
{
- /**
- * @dataProvider messageProvider
- */
+ #[DataProvider('messageProvider')]
public function testPrintAst(string $message, ?Options $options = null): void
{
$parser = new Parser($message, $options);
@@ -28,7 +27,7 @@ public function testPrintAst(string $message, ?Options $options = null): void
/**
* @return array
*/
- public function messageProvider(): array
+ public static function messageProvider(): array
{
return [
'basic_argument_1' => ['message' => '{a}'],
@@ -186,7 +185,6 @@ public function messageProvider(): array
'simple_number_arg_1' => ['message' => 'I have {numCats, number} cats.'],
'time_arg_skeleton_1' => ['message' => '{0, time, ::h:mm a}'],
'treat_unicode_nbsp_as_whitespace' => [
- // phpcs:ignore SlevomatCodingStandard.PHP.RequireNowdoc.RequiredNowdoc
'message' => <<assertSame(constant($constantName), $expectedValue);
}
@@ -28,7 +25,7 @@ public function testPublicConstants(string $constantName, $expectedValue): void
/**
* @return array
*/
- public function publicConstantsProvider(): array
+ public static function publicConstantsProvider(): array
{
$class = DateTimeFormatOptions::class;
@@ -130,9 +127,8 @@ public function publicConstantsProvider(): array
/**
* @param OptionsType $options
- *
- * @dataProvider constructorOptionsProvider
*/
+ #[DataProvider('constructorOptionsProvider')]
public function testConstructorOptions(array $options): void
{
$formatOptions = new DateTimeFormatOptions($options);
@@ -146,7 +142,7 @@ public function testConstructorOptions(array $options): void
/**
* @return array
*/
- public function constructorOptionsProvider(): array
+ public static function constructorOptionsProvider(): array
{
return [
['options' => []],
diff --git a/tests/Intl/DateTimeFormatTest.php b/tests/Intl/DateTimeFormatTest.php
index 3f990b7..29dd1aa 100644
--- a/tests/Intl/DateTimeFormatTest.php
+++ b/tests/Intl/DateTimeFormatTest.php
@@ -10,6 +10,7 @@
use FormatPHP\Intl\DateTimeFormatOptions;
use FormatPHP\Intl\Locale;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
use function array_merge;
use function date_default_timezone_get;
@@ -44,9 +45,8 @@ protected function tearDown(): void
/**
* @param OptionsType $options
- *
- * @dataProvider formatProvider
*/
+ #[DataProvider('formatProvider')]
public function testFormat(array $options, string $ko, string $en, string $skeleton, bool $skip = false): void
{
if ($skip) {
@@ -84,9 +84,8 @@ public function testUnknownTimeZoneThrowsException(): void
/**
* @param OptionsType $additionalOptions
- *
- * @dataProvider formatThrowsExceptionWhenDateStyleOrTimeStyleMixedWithStylePropertyProvider
*/
+ #[DataProvider('formatThrowsExceptionWhenDateStyleOrTimeStyleMixedWithStylePropertyProvider')]
public function testFormatThrowsExceptionWhenDateStyleOrTimeStyleMixedWithStyleProperty(
?string $dateStyle,
?string $timeStyle,
@@ -195,7 +194,7 @@ public function testUseHourCycleFromLocale(): void
*
* @return array
*/
- public function formatProvider(): array
+ public static function formatProvider(): array
{
return [
[
@@ -620,7 +619,7 @@ public function formatProvider(): array
/**
* @return array
*/
- public function formatThrowsExceptionWhenDateStyleOrTimeStyleMixedWithStylePropertyProvider(): array
+ public static function formatThrowsExceptionWhenDateStyleOrTimeStyleMixedWithStylePropertyProvider(): array
{
$styleProperties = [
'era' => 'short',
diff --git a/tests/Intl/DisplayNamesOptionsTest.php b/tests/Intl/DisplayNamesOptionsTest.php
index 66cc0cd..b13c4f3 100644
--- a/tests/Intl/DisplayNamesOptionsTest.php
+++ b/tests/Intl/DisplayNamesOptionsTest.php
@@ -6,6 +6,7 @@
use FormatPHP\Intl\DisplayNamesOptions;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
use function constant;
use function json_encode;
@@ -15,12 +16,8 @@
*/
class DisplayNamesOptionsTest extends TestCase
{
- /**
- * @param string | int $expectedValue
- *
- * @dataProvider publicConstantsProvider
- */
- public function testPublicConstants(string $constantName, $expectedValue): void
+ #[DataProvider('publicConstantsProvider')]
+ public function testPublicConstants(string $constantName, int | string $expectedValue): void
{
$this->assertSame(constant($constantName), $expectedValue);
}
@@ -28,7 +25,7 @@ public function testPublicConstants(string $constantName, $expectedValue): void
/**
* @return array
*/
- public function publicConstantsProvider(): array
+ public static function publicConstantsProvider(): array
{
$class = DisplayNamesOptions::class;
@@ -90,9 +87,8 @@ public function publicConstantsProvider(): array
/**
* @param OptionsType $options
- *
- * @dataProvider constructorOptionsProvider
*/
+ #[DataProvider('constructorOptionsProvider')]
public function testConstructorOptions(array $options): void
{
$formatOptions = new DisplayNamesOptions($options);
@@ -106,7 +102,7 @@ public function testConstructorOptions(array $options): void
/**
* @return array
*/
- public function constructorOptionsProvider(): array
+ public static function constructorOptionsProvider(): array
{
return [
['options' => []],
diff --git a/tests/Intl/DisplayNamesTest.php b/tests/Intl/DisplayNamesTest.php
index d7001a6..99d2978 100644
--- a/tests/Intl/DisplayNamesTest.php
+++ b/tests/Intl/DisplayNamesTest.php
@@ -9,30 +9,30 @@
use FormatPHP\Intl\DisplayNamesOptions;
use FormatPHP\Intl\Locale;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
class DisplayNamesTest extends TestCase
{
/**
* @param "region" | "script" $type
- *
- * @dataProvider invalidValueProvider
*/
- public function testThrowsExceptionForInvalidValue(string $code, string $type): void
+ #[DataProvider('invalidValueProvider')]
+ public function testThrowsExceptionForInvalidValue(string $value, string $type): void
{
$locale = new Locale('en-US');
$options = new DisplayNamesOptions(['type' => $type]);
$displayNames = new DisplayNames($locale, $options);
$this->expectException(UnableToFormatDisplayNameException::class);
- $this->expectExceptionMessage("Invalid value \"$code\" for option $type");
+ $this->expectExceptionMessage("Invalid value \"$value\" for option $type");
- $displayNames->of($code);
+ $displayNames->of($value);
}
/**
* @return array
*/
- public function invalidValueProvider(): array
+ public static function invalidValueProvider(): array
{
return [
['value' => 'A', 'type' => 'region'],
diff --git a/tests/Intl/MessageFormatTest.php b/tests/Intl/MessageFormatTest.php
index 90ffd5b..e488056 100644
--- a/tests/Intl/MessageFormatTest.php
+++ b/tests/Intl/MessageFormatTest.php
@@ -18,6 +18,7 @@
use FormatPHP\MessageInterface;
use FormatPHP\Test\TestCase;
use FormatPHP\Util\DescriptorIdBuilder;
+use PHPUnit\Framework\Attributes\DataProvider;
/**
* @phpstan-import-type MessageValuesType from FormatterInterface
@@ -69,9 +70,8 @@ public function testFormatThrowsExceptionWhenUnableToFormatMessage(): void
/**
* @param array $replacements
- *
- * @dataProvider formatProvider
*/
+ #[DataProvider('formatProvider')]
public function testFormat(
Locale $locale,
DescriptorInterface $descriptor,
@@ -92,7 +92,7 @@ public function testFormat(
/**
* @return mixed[]
*/
- public function formatProvider(): array
+ public static function formatProvider(): array
{
$localeEn = new Locale('en');
$localeFoo = new Locale('foo');
diff --git a/tests/Intl/NumberFormatOptionsTest.php b/tests/Intl/NumberFormatOptionsTest.php
index 8f2c08c..c2eb673 100644
--- a/tests/Intl/NumberFormatOptionsTest.php
+++ b/tests/Intl/NumberFormatOptionsTest.php
@@ -6,6 +6,7 @@
use FormatPHP\Intl\NumberFormatOptions;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
use function constant;
use function json_encode;
@@ -15,9 +16,7 @@
*/
class NumberFormatOptionsTest extends TestCase
{
- /**
- * @dataProvider publicConstantsProvider
- */
+ #[DataProvider('publicConstantsProvider')]
public function testPublicConstants(string $constantName, string $expectedValue): void
{
$this->assertSame(constant($constantName), $expectedValue);
@@ -25,9 +24,8 @@ public function testPublicConstants(string $constantName, string $expectedValue)
/**
* @param OptionsType $options
- *
- * @dataProvider constructorOptionsProvider
*/
+ #[DataProvider('constructorOptionsProvider')]
public function testConstructorOptions(array $options): void
{
$formatOptions = new NumberFormatOptions($options);
@@ -41,7 +39,7 @@ public function testConstructorOptions(array $options): void
/**
* @return array
*/
- public function publicConstantsProvider(): array
+ public static function publicConstantsProvider(): array
{
$class = NumberFormatOptions::class;
@@ -236,7 +234,7 @@ public function publicConstantsProvider(): array
/**
* @return array
*/
- public function constructorOptionsProvider(): array
+ public static function constructorOptionsProvider(): array
{
return [
['options' => []],
diff --git a/tests/Intl/NumberFormatTest.php b/tests/Intl/NumberFormatTest.php
index daafabc..d2c5ea5 100644
--- a/tests/Intl/NumberFormatTest.php
+++ b/tests/Intl/NumberFormatTest.php
@@ -10,6 +10,7 @@
use FormatPHP\Intl\NumberFormat;
use FormatPHP\Intl\NumberFormatOptions;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
/**
* @phpstan-import-type OptionsType from NumberFormatOptions
@@ -122,13 +123,16 @@ public function testEvaluatedLocaleWithOptions(): void
}
/**
- * @param int | float $number
* @param OptionsType $options
- *
- * @dataProvider formatProvider
*/
- public function testFormat($number, string $locale, array $options, string $expected, string $skeleton): void
- {
+ #[DataProvider('formatProvider')]
+ public function testFormat(
+ float | int $number,
+ string $locale,
+ array $options,
+ string $expected,
+ string $skeleton,
+ ): void {
$locale = new Locale($locale);
$formatOptions = new NumberFormatOptions($options);
$formatter = new NumberFormat($locale, $formatOptions);
@@ -138,12 +142,10 @@ public function testFormat($number, string $locale, array $options, string $expe
}
/**
- * @param int | float $value
* @param array $expected
- *
- * @dataProvider roundingModeProvider
*/
- public function testRoundingMode($value, array $expected): void
+ #[DataProvider('roundingModeProvider')]
+ public function testRoundingMode(float | int $value, array $expected): void
{
$locale = new Locale('en-US');
@@ -166,7 +168,7 @@ public function testRoundingMode($value, array $expected): void
/**
* @return array
*/
- public function formatProvider(): array
+ public static function formatProvider(): array
{
return [
[
@@ -847,7 +849,7 @@ public function formatProvider(): array
*
* @return array}>
*/
- public function roundingModeProvider(): array
+ public static function roundingModeProvider(): array
{
return [
[
diff --git a/tests/MessageLoaderTest.php b/tests/MessageLoaderTest.php
index 58b0e8f..5417ff3 100644
--- a/tests/MessageLoaderTest.php
+++ b/tests/MessageLoaderTest.php
@@ -13,6 +13,7 @@
use FormatPHP\MessageCollection;
use FormatPHP\MessageInterface;
use FormatPHP\MessageLoader;
+use PHPUnit\Framework\Attributes\DataProvider;
use function sprintf;
@@ -109,9 +110,8 @@ public function testLoadMessagesWithFallback(): void
/**
* @param ReaderType $customReader
- *
- * @dataProvider provideCustomReader
*/
+ #[DataProvider('provideCustomReader')]
public function testLoadMessagesWithCustomReader($customReader): void
{
$locale = new Locale('ar');
@@ -136,7 +136,7 @@ public function testLoadMessagesWithCustomReader($customReader): void
/**
* @return mixed[]
*/
- public function provideCustomReader(): array
+ public static function provideCustomReader(): array
{
$customReader = new CustomMessageLoaderReader();
diff --git a/tests/PseudoLocale/ConverterTest.php b/tests/PseudoLocale/ConverterTest.php
index b219d7a..1dd8f02 100644
--- a/tests/PseudoLocale/ConverterTest.php
+++ b/tests/PseudoLocale/ConverterTest.php
@@ -10,15 +10,14 @@
use FormatPHP\Test\TestCase;
use FormatPHP\Util\FileSystemHelper;
use FormatPHP\Util\FormatHelper;
+use PHPUnit\Framework\Attributes\DataProvider;
use Psr\Log\LoggerInterface;
use function json_decode;
class ConverterTest extends TestCase
{
- /**
- * @dataProvider providePseudoLocales
- */
+ #[DataProvider('providePseudoLocales')]
public function testConvert(string $file, string $pseudoLocale, ConverterOptions $options): void
{
$outFile = $options->outFile ?? 'php://output';
@@ -60,7 +59,7 @@ function (string $file, string $contents) use ($outFile): bool {
/**
* @return array
*/
- public function providePseudoLocales(): array
+ public static function providePseudoLocales(): array
{
return [
'pseudo locale en-XA' => [
diff --git a/tests/PseudoLocale/Locale/AbstractLocaleTest.php b/tests/PseudoLocale/Locale/AbstractLocaleTest.php
index 28ca159..b2c57c2 100644
--- a/tests/PseudoLocale/Locale/AbstractLocaleTest.php
+++ b/tests/PseudoLocale/Locale/AbstractLocaleTest.php
@@ -13,12 +13,11 @@
use FormatPHP\PseudoLocale\Locale\XxLs;
use FormatPHP\PseudoLocale\Locale\XxZa;
use FormatPHP\Test\TestCase;
+use PHPUnit\Framework\Attributes\DataProvider;
class AbstractLocaleTest extends TestCase
{
- /**
- * @dataProvider provideLocales
- */
+ #[DataProvider('provideLocales')]
public function testConvertThrowsExceptionForParserError(AbstractLocale $locale): void
{
$this->expectException(UnableToParseMessageException::class);
@@ -29,7 +28,7 @@ public function testConvertThrowsExceptionForParserError(AbstractLocale $locale)
/**
* @return array
*/
- public function provideLocales(): array
+ public static function provideLocales(): array
{
return [
'en-XA' => ['locale' => new EnXa()],
diff --git a/tests/Util/FileSystemHelperTest.php b/tests/Util/FileSystemHelperTest.php
index c58ba07..97772f9 100644
--- a/tests/Util/FileSystemHelperTest.php
+++ b/tests/Util/FileSystemHelperTest.php
@@ -11,6 +11,7 @@
use FormatPHP\Exception\UnableToWriteFileException;
use FormatPHP\Test\TestCase;
use FormatPHP\Util\FileSystemHelper;
+use PHPUnit\Framework\Attributes\DataProvider;
use function assert;
use function file_get_contents;
@@ -134,9 +135,7 @@ public function testLoadClosureFromScriptThrowsExceptionWhenPathIsADirectory():
$this->assertNull($file->loadClosureFromScript('/path/to/script.php'));
}
- /**
- * @dataProvider loadClosureFromScriptProvider
- */
+ #[DataProvider('loadClosureFromScriptProvider')]
public function testLoadClosureFromScript(string $path, bool $expectClosure): void
{
$file = new FileSystemHelper();
@@ -152,7 +151,7 @@ public function testLoadClosureFromScript(string $path, bool $expectClosure): vo
/**
* @return array
*/
- public function loadClosureFromScriptProvider(): array
+ public static function loadClosureFromScriptProvider(): array
{
return [
[
diff --git a/tests/Util/FormatHelperTest.php b/tests/Util/FormatHelperTest.php
index 33dc14d..bbca94b 100644
--- a/tests/Util/FormatHelperTest.php
+++ b/tests/Util/FormatHelperTest.php
@@ -24,6 +24,7 @@
use FormatPHP\Test\TestCase;
use FormatPHP\Util\FileSystemHelper;
use FormatPHP\Util\FormatHelper;
+use PHPUnit\Framework\Attributes\DataProvider;
use function getenv;
use function sprintf;
@@ -39,9 +40,8 @@ public function testGetReaderWithNullParameter(): void
/**
* @param class-string $expectedType
- *
- * @dataProvider validReaderProvider
*/
+ #[DataProvider('validReaderProvider')]
public function testGetReader(string $reader, string $expectedType): void
{
$helper = new FormatHelper(new FileSystemHelper());
@@ -52,7 +52,7 @@ public function testGetReader(string $reader, string $expectedType): void
/**
* @return array
*/
- public function validReaderProvider(): array
+ public static function validReaderProvider(): array
{
return [
'simple' => [
@@ -93,9 +93,7 @@ public function validReaderProvider(): array
];
}
- /**
- * @dataProvider invalidReaderProvider
- */
+ #[DataProvider('invalidReaderProvider')]
public function testInvalidReader(string $reader, bool $shouldSkip): void
{
if ($shouldSkip) {
@@ -120,7 +118,7 @@ public function testInvalidReader(string $reader, bool $shouldSkip): void
/**
* @return array
*/
- public function invalidReaderProvider(): array
+ public static function invalidReaderProvider(): array
{
return [
'non-existent class' => [
@@ -152,9 +150,8 @@ public function invalidReaderProvider(): array
/**
* @param class-string $expectedType
- *
- * @dataProvider validWriterProvider
*/
+ #[DataProvider('validWriterProvider')]
public function testGetWriter(string $writer, string $expectedType): void
{
$helper = new FormatHelper(new FileSystemHelper());
@@ -165,7 +162,7 @@ public function testGetWriter(string $writer, string $expectedType): void
/**
* @return mixed[]
*/
- public function validWriterProvider(): array
+ public static function validWriterProvider(): array
{
return [
'simple' => [
@@ -206,9 +203,7 @@ public function validWriterProvider(): array
];
}
- /**
- * @dataProvider invalidWriterProvider
- */
+ #[DataProvider('invalidWriterProvider')]
public function testInvalidWriter(string $writer, bool $shouldSkip): void
{
if ($shouldSkip) {
@@ -232,37 +227,35 @@ public function testInvalidWriter(string $writer, bool $shouldSkip): void
}
/**
- * @return array
+ * @return array
*/
- public function invalidWriterProvider(): array
+ public static function invalidWriterProvider(): array
{
return [
'not a closure' => [
- 'reader' => __DIR__ . '/fixtures/writer-closure-invalid-01.php',
+ 'writer' => __DIR__ . '/fixtures/writer-closure-invalid-01.php',
'shouldSkip' => false,
],
'not enough parameters' => [
- 'reader' => __DIR__ . '/fixtures/writer-closure-invalid-02.php',
+ 'writer' => __DIR__ . '/fixtures/writer-closure-invalid-02.php',
'shouldSkip' => false,
],
'first param is not DescriptorCollection' => [
- 'reader' => __DIR__ . '/fixtures/writer-closure-invalid-03.php',
+ 'writer' => __DIR__ . '/fixtures/writer-closure-invalid-03.php',
'shouldSkip' => (fn (): bool => (bool) getenv('GITHUB_ACTIONS'))(),
],
'second param is not MessageExtractorOptions' => [
- 'reader' => __DIR__ . '/fixtures/writer-closure-invalid-04.php',
+ 'writer' => __DIR__ . '/fixtures/writer-closure-invalid-04.php',
'shouldSkip' => (fn (): bool => (bool) getenv('GITHUB_ACTIONS'))(),
],
'return type is not array' => [
- 'reader' => __DIR__ . '/fixtures/writer-closure-invalid-05.php',
+ 'writer' => __DIR__ . '/fixtures/writer-closure-invalid-05.php',
'shouldSkip' => (fn (): bool => (bool) getenv('GITHUB_ACTIONS'))(),
],
];
}
- /**
- * @dataProvider validateWriterCallableProvider
- */
+ #[DataProvider('validateWriterCallableProvider')]
public function testValidateWriterCallable(callable $writer): void
{
$helper = new FormatHelper(new FileSystemHelper());
@@ -273,7 +266,7 @@ public function testValidateWriterCallable(callable $writer): void
/**
* @return mixed[]
*/
- public function validateWriterCallableProvider(): array
+ public static function validateWriterCallableProvider(): array
{
$writerInstance = new ChromeWriter();
From cc7ecda63713bbf92b57744c767318c8b75ce763 Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Thu, 15 May 2025 01:12:15 -0500
Subject: [PATCH 14/21] chore: upgrade PHPStan
---
composer.json | 6 +--
phpstan-baseline.neon | 46 -------------------
phpstan.neon.dist | 4 +-
src/Extractor/MessageExtractor.php | 11 ++---
.../Descriptor/PragmaCollectorVisitor.php | 4 --
src/Icu/MessageFormat/Parser.php | 1 +
.../Parser/NumberSkeletonParser.php | 8 ++--
src/Intl/DateTimeFormat.php | 2 +-
src/Intl/Locale.php | 4 +-
src/Util/FileSystemHelper.php | 7 +--
src/Util/FormatHelper.php | 41 ++++++++++++-----
tests/Extractor/MessageExtractorTest.php | 5 +-
tests/Format/FormatTest.php | 20 --------
tests/Format/Reader/ChromeReaderTest.php | 2 -
tests/Format/Reader/CrowdinReaderTest.php | 2 -
tests/Format/Reader/FormatPHPReaderTest.php | 2 -
tests/Format/Reader/SimpleReaderTest.php | 2 -
tests/Format/Reader/SmartlingReaderTest.php | 2 -
tests/FormatPHPTest.php | 4 +-
tests/Icu/MessageFormat/Parser/ErrorTest.php | 31 -------------
tests/Intl/DateTimeFormatTest.php | 6 +--
tests/Intl/NumberFormat/PercentTest.php | 4 +-
tests/MessageLoaderTest.php | 5 --
23 files changed, 61 insertions(+), 158 deletions(-)
delete mode 100644 phpstan-baseline.neon
delete mode 100644 tests/Format/FormatTest.php
diff --git a/composer.json b/composer.json
index a0c88a6..fe08d6e 100644
--- a/composer.json
+++ b/composer.json
@@ -40,9 +40,9 @@
"php-parallel-lint/php-console-highlighter": "^1.0",
"php-parallel-lint/php-parallel-lint": "^1.4",
"phpstan/extension-installer": "^1.4",
- "phpstan/phpstan": "^1.10.30",
- "phpstan/phpstan-mockery": "^1.0",
- "phpstan/phpstan-phpunit": "^1.1",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-mockery": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^11.5",
"ramsey/coding-standard": "^2.3",
"ramsey/composer-repl": "^1.5",
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
deleted file mode 100644
index c74c2d8..0000000
--- a/phpstan-baseline.neon
+++ /dev/null
@@ -1,46 +0,0 @@
-parameters:
- ignoreErrors:
- -
- message: "#^Unreachable statement \\- code above always terminates\\.$#"
- count: 1
- path: src/Icu/MessageFormat/Parser.php
-
- -
- message: "#^Parameter \\#2 \\$subject of function preg_match expects string, string\\|false given\\.$#"
- count: 1
- path: src/Intl/DateTimeFormat.php
-
- -
- message: "#^Parameter \\#1 \\$locale of static method Locale\\:\\:getKeywords\\(\\) expects string, string\\|null given\\.$#"
- count: 1
- path: src/Intl/Locale.php
-
- -
- message: "#^Parameter \\#1 \\$locale of static method Locale\\:\\:parseLocale\\(\\) expects string, string\\|null given\\.$#"
- count: 1
- path: src/Intl/Locale.php
-
- -
- message: "#^Parameter \\#1 \\$filename of function file_put_contents expects string, resource\\|string given\\.$#"
- count: 1
- path: src/Util/FileSystemHelper.php
-
- -
- message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, resource\\|string given\\.$#"
- count: 1
- path: src/Util/FileSystemHelper.php
-
- -
- message: "#^Cannot call method getName\\(\\) on ReflectionType\\|null\\.$#"
- count: 5
- path: src/Util/FormatHelper.php
-
- -
- message: "#^Constant FormatPHP\\\\Test\\\\Intl\\\\NumberFormat\\\\PercentTest\\:\\:NUMBER is unused\\.$#"
- count: 1
- path: tests/Intl/NumberFormat/PercentTest.php
-
- -
- message: "#^Unreachable statement \\- code above always terminates\\.$#"
- count: 1
- path: tests/Intl/NumberFormat/PercentTest.php
diff --git a/phpstan.neon.dist b/phpstan.neon.dist
index 79a2632..1e304cc 100644
--- a/phpstan.neon.dist
+++ b/phpstan.neon.dist
@@ -1,8 +1,6 @@
-includes:
- - phpstan-baseline.neon
-
parameters:
tmpDir: ./build/cache/phpstan
+ treatPhpDocTypesAsCertain: false
level: max
paths:
- ./src
diff --git a/src/Extractor/MessageExtractor.php b/src/Extractor/MessageExtractor.php
index 95b0630..a44d80f 100644
--- a/src/Extractor/MessageExtractor.php
+++ b/src/Extractor/MessageExtractor.php
@@ -51,6 +51,7 @@
use Ramsey\Collection\Exception\CollectionMismatchException;
use function array_filter;
+use function assert;
use function class_exists;
use function count;
use function is_a;
@@ -196,7 +197,6 @@ private function loadDescriptorParser(string $parserNameOrScript): DescriptorPar
if (class_exists($parserNameOrScript) && is_a($parserNameOrScript, DescriptorParserInterface::class, true)) {
$parser = new $parserNameOrScript();
} else {
- /** @var DescriptorParserCallable | null $parser */
$parser = $this->file->loadClosureFromScript($parserNameOrScript);
}
@@ -283,14 +283,11 @@ public function __invoke(
}
/**
- * @return Closure(DescriptorInterface):mixed
+ * @return Closure(DescriptorInterface): (Descriptor | null)
*/
private function flattenMessage(): Closure
{
- /**
- * @var Closure(DescriptorInterface):mixed
- */
- return function (Descriptor $descriptor): ?Descriptor {
+ return function (DescriptorInterface $descriptor): ?Descriptor {
$message = $descriptor->getDefaultMessage();
$messageFormatParser = new MessageFormatParser((string) $message);
$result = $messageFormatParser->parse();
@@ -299,6 +296,8 @@ private function flattenMessage(): Closure
return null;
}
+ assert($descriptor instanceof Descriptor);
+
/** @var MessageFormatParser\Type\ElementCollection $messageAst */
$messageAst = $result->val;
diff --git a/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php b/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php
index 29381bc..1701b1d 100644
--- a/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php
+++ b/src/Extractor/Parser/Descriptor/PragmaCollectorVisitor.php
@@ -134,10 +134,6 @@ private function parseMetadata(string $metadata): void
preg_match_all('/(([a-z0-9_\-]+):([a-z0-9_\-]+))+/i', $metadata, $matches);
- /**
- * @var int $index
- * @var string $propertyName
- */
foreach ($matches[2] as $index => $propertyName) {
$compareParsed .= preg_replace('/\s+/', '', strtolower("$propertyName:{$matches[3][$index]}"));
$this->parsedPragma[$propertyName] = $matches[3][$index];
diff --git a/src/Icu/MessageFormat/Parser.php b/src/Icu/MessageFormat/Parser.php
index 6edd0fb..350e0d2 100644
--- a/src/Icu/MessageFormat/Parser.php
+++ b/src/Icu/MessageFormat/Parser.php
@@ -782,6 +782,7 @@ private function parseArgumentOptions(
}
}
+ /** @phpstan-ignore deadCode.unreachable */
return $this->error(
Error::INVALID_ARGUMENT_TYPE,
new Type\Location($typeStartPosition, $typeEndPosition),
diff --git a/src/Icu/MessageFormat/Parser/NumberSkeletonParser.php b/src/Icu/MessageFormat/Parser/NumberSkeletonParser.php
index 5f8ada6..1a88a29 100644
--- a/src/Icu/MessageFormat/Parser/NumberSkeletonParser.php
+++ b/src/Icu/MessageFormat/Parser/NumberSkeletonParser.php
@@ -97,10 +97,9 @@ public function parseTokens(string $skeleton): Type\NumberSkeletonTokenCollectio
$tokens = new Type\NumberSkeletonTokenCollection();
foreach ($stringTokens as $stringToken) {
- /** @var string[] $stemAndOptions */
- $stemAndOptions = preg_split('/[\/]/u', $stringToken);
+ $stemAndOptions = preg_split('/\//u', $stringToken);
- if (count($stemAndOptions) === 0) {
+ if ($stemAndOptions === false || count($stemAndOptions) === 0) {
throw new Exception\InvalidArgumentException('Invalid number skeleton');
}
@@ -431,6 +430,7 @@ private function integerWidthCallback(Type\NumberFormatOptions $options): Closur
* @throws Exception\UnsupportedOptionException
*/
return function (array $m) use ($options): string {
+ /** @var string[] $matches */
$matches = [
$m[0] ?? '',
$m[1] ?? '',
@@ -463,6 +463,7 @@ private function fractionPrecisionCallback(Type\NumberFormatOptions $options): C
* @param string[] $m
*/
return function (array $m) use ($options): string {
+ /** @var string[] $matches */
$matches = [$m[0] ?? '', $m[1] ?? '', $m[2] ?? '', $m[3] ?? '', $m[4] ?? '', $m[5] ?? ''];
// .000* case (before ICU67 it was .000+)
@@ -503,6 +504,7 @@ private function significantPrecisionCallback(Type\NumberFormatOptions $options)
* @param string[] $m
*/
return function (array $m) use ($options): string {
+ /** @var string[] $matches */
$matches = [
$m[0] ?? '',
$m[1] ?? '',
diff --git a/src/Intl/DateTimeFormat.php b/src/Intl/DateTimeFormat.php
index a98dff9..19a48d6 100644
--- a/src/Intl/DateTimeFormat.php
+++ b/src/Intl/DateTimeFormat.php
@@ -382,7 +382,7 @@ private function withHourCycleFallback(LocaleInterface $locale, DateTimeFormatOp
PhpIntlDateFormatter::FULL,
);
- preg_match(self::HOUR_PATTERN, $dateFormatter->getPattern(), $matches);
+ preg_match(self::HOUR_PATTERN, (string) $dateFormatter->getPattern(), $matches);
// Fallback to h12, if we can't determine the hour cycle from this locale.
return $locale->withHourCycle(self::HOUR_CYCLE_MAP[$matches[1] ?? 'h']);
diff --git a/src/Intl/Locale.php b/src/Intl/Locale.php
index c00b393..f15e635 100644
--- a/src/Intl/Locale.php
+++ b/src/Intl/Locale.php
@@ -380,7 +380,7 @@ private function applyOptions(LocaleOptions $options): void
}
/**
- * @return array{0: string, 1: callable}
+ * @return array{0: string, 1: callable(): (string | null)}
*/
private function getUnicodeKeywordWithValue(string $keyword, string $defaultValue): array
{
@@ -410,7 +410,7 @@ private function numericValue(): ?string
*/
private function parseLocale(string $locale): array
{
- $canonicalizedLocale = PhpLocale::canonicalize($locale);
+ $canonicalizedLocale = (string) PhpLocale::canonicalize($locale);
/** @var array{language?: string, script?: string, region?: string, grandfathered?: string} $parsed */
$parsed = PhpLocale::parseLocale($canonicalizedLocale);
diff --git a/src/Util/FileSystemHelper.php b/src/Util/FileSystemHelper.php
index fb96527..bc5af3d 100644
--- a/src/Util/FileSystemHelper.php
+++ b/src/Util/FileSystemHelper.php
@@ -30,6 +30,7 @@
use FormatPHP\Exception\UnableToWriteFileException;
use JsonException;
+use function assert;
use function file_get_contents;
use function file_put_contents;
use function fwrite;
@@ -124,12 +125,10 @@ public function getJsonContents(string $filePath): array
}
/**
- * @param string | resource | mixed $file
- *
* @throws InvalidArgumentException
* @throws UnableToWriteFileException
*/
- public function writeContents($file, string $contents): void
+ public function writeContents(mixed $file, string $contents): void
{
if (!is_string($file) && (!is_resource($file) || get_resource_type($file) !== 'stream')) {
throw new InvalidArgumentException(sprintf(
@@ -148,6 +147,8 @@ public function writeContents($file, string $contents): void
return;
}
+ assert(is_string($file));
+
$bytes = @file_put_contents($file, $contents);
if ($bytes === false) {
diff --git a/src/Util/FormatHelper.php b/src/Util/FormatHelper.php
index a23574d..656d5ca 100644
--- a/src/Util/FormatHelper.php
+++ b/src/Util/FormatHelper.php
@@ -43,6 +43,7 @@
use FormatPHP\Format\WriterOptions;
use FormatPHP\MessageCollection;
use ReflectionFunction;
+use ReflectionNamedType;
use Throwable;
use function assert;
@@ -166,7 +167,7 @@ public function validateReaderCallable(?callable $formatter): callable
assert($formatter !== null);
if (!$formatter instanceof Closure) {
- $formatter = Closure::fromCallable($formatter);
+ $formatter = $formatter(...);
}
$reflected = new ReflectionFunction($formatter);
@@ -175,18 +176,25 @@ public function validateReaderCallable(?callable $formatter): callable
$param1 = $reflected->getParameters()[0];
- assert($param1->hasType() && $param1->getType()->getName() === 'array');
- assert($reflected->hasReturnType() && $reflected->getReturnType()->getName() === MessageCollection::class);
+ assert(
+ $param1->hasType()
+ && $param1->getType() instanceof ReflectionNamedType
+ && $param1->getType()->getName() === 'array',
+ );
+ assert(
+ $reflected->hasReturnType()
+ && $reflected->getReturnType() instanceof ReflectionNamedType
+ && $reflected->getReturnType()->getName() === MessageCollection::class,
+ );
} catch (Throwable $exception) {
throw new InvalidArgumentException(sprintf(
'The format provided is not a known format, an instance of '
. '%s, or a callable of the shape `callable(array):%s`.',
ReaderInterface::class,
MessageCollection::class,
- ));
+ ), previous: $exception);
}
- /** @var ReaderCallableType */
return $formatter;
}
@@ -201,7 +209,7 @@ public function validateWriterCallable(?callable $formatter): callable
assert($formatter !== null);
if (!$formatter instanceof Closure) {
- $formatter = Closure::fromCallable($formatter);
+ $formatter = $formatter(...);
}
$reflected = new ReflectionFunction($formatter);
@@ -211,9 +219,21 @@ public function validateWriterCallable(?callable $formatter): callable
$param1 = $reflected->getParameters()[0];
$param2 = $reflected->getParameters()[1];
- assert($param1->hasType() && $param1->getType()->getName() === DescriptorCollection::class);
- assert($param2->hasType() && $param2->getType()->getName() === WriterOptions::class);
- assert($reflected->hasReturnType() && $reflected->getReturnType()->getName() === 'array');
+ assert(
+ $param1->hasType()
+ && $param1->getType() instanceof ReflectionNamedType
+ && $param1->getType()->getName() === DescriptorCollection::class,
+ );
+ assert(
+ $param2->hasType()
+ && $param2->getType() instanceof ReflectionNamedType
+ && $param2->getType()->getName() === WriterOptions::class,
+ );
+ assert(
+ $reflected->hasReturnType()
+ && $reflected->getReturnType() instanceof ReflectionNamedType
+ && $reflected->getReturnType()->getName() === 'array',
+ );
} catch (Throwable $exception) {
throw new InvalidArgumentException(sprintf(
'The format provided is not a known format, an instance of '
@@ -221,10 +241,9 @@ public function validateWriterCallable(?callable $formatter): callable
WriterInterface::class,
DescriptorCollection::class,
WriterOptions::class,
- ));
+ ), previous: $exception);
}
- /** @var WriterCallableType */
return $formatter;
}
}
diff --git a/tests/Extractor/MessageExtractorTest.php b/tests/Extractor/MessageExtractorTest.php
index 4947ecb..74452b6 100644
--- a/tests/Extractor/MessageExtractorTest.php
+++ b/tests/Extractor/MessageExtractorTest.php
@@ -431,7 +431,7 @@ public function testProcessWithExternalFormatterScript(): void
public function testProcessLogsErrorForInvalidFormatter(): void
{
$logger = $this->mockery(LoggerInterface::class);
- $logger->shouldReceive('error')->withArgs(function (string $message): bool {
+ $logger->expects('error')->withArgs(function (string $message): bool {
$expected = 'The format provided is not a known format, an instance of '
. 'FormatPHP\\Format\\WriterInterface, or a callable of the '
. 'shape `callable(FormatPHP\\DescriptorCollection,'
@@ -454,9 +454,6 @@ public function testProcessLogsErrorForInvalidFormatter(): void
ob_start();
$extractor->process([__DIR__ . '/Parser/Descriptor/fixtures/*.php']);
ob_end_clean();
-
- // Perform assertion to avoid "risky" test warning.
- $this->assertTrue(true);
}
public function testProcessWithNoResults(): void
diff --git a/tests/Format/FormatTest.php b/tests/Format/FormatTest.php
deleted file mode 100644
index a116030..0000000
--- a/tests/Format/FormatTest.php
+++ /dev/null
@@ -1,20 +0,0 @@
-assertSame('chrome', Format::CHROME);
- $this->assertSame('crowdin', Format::CROWDIN);
- $this->assertSame('formatphp', Format::FORMATPHP);
- $this->assertSame('simple', Format::SIMPLE);
- $this->assertSame('smartling', Format::SMARTLING);
- }
-}
diff --git a/tests/Format/Reader/ChromeReaderTest.php b/tests/Format/Reader/ChromeReaderTest.php
index ee101e1..223bdda 100644
--- a/tests/Format/Reader/ChromeReaderTest.php
+++ b/tests/Format/Reader/ChromeReaderTest.php
@@ -6,7 +6,6 @@
use FormatPHP\Exception\InvalidMessageShapeException;
use FormatPHP\Format\Reader\ChromeReader;
-use FormatPHP\MessageCollection;
use FormatPHP\MessageInterface;
use FormatPHP\Test\TestCase;
@@ -49,7 +48,6 @@ public function testInvoke(): void
$collection = $formatReader($data);
- $this->assertInstanceOf(MessageCollection::class, $collection);
$this->assertCount(2, $collection);
$this->assertInstanceOf(MessageInterface::class, $collection['foo']);
$this->assertSame('I am foo', $collection['foo']->getMessage());
diff --git a/tests/Format/Reader/CrowdinReaderTest.php b/tests/Format/Reader/CrowdinReaderTest.php
index 143d84a..1079ef3 100644
--- a/tests/Format/Reader/CrowdinReaderTest.php
+++ b/tests/Format/Reader/CrowdinReaderTest.php
@@ -6,7 +6,6 @@
use FormatPHP\Exception\InvalidMessageShapeException;
use FormatPHP\Format\Reader\CrowdinReader;
-use FormatPHP\MessageCollection;
use FormatPHP\MessageInterface;
use FormatPHP\Test\TestCase;
@@ -49,7 +48,6 @@ public function testInvoke(): void
$collection = $formatReader($data);
- $this->assertInstanceOf(MessageCollection::class, $collection);
$this->assertCount(2, $collection);
$this->assertInstanceOf(MessageInterface::class, $collection['foo']);
$this->assertSame('I am foo', $collection['foo']->getMessage());
diff --git a/tests/Format/Reader/FormatPHPReaderTest.php b/tests/Format/Reader/FormatPHPReaderTest.php
index 3dacd05..ddb92f3 100644
--- a/tests/Format/Reader/FormatPHPReaderTest.php
+++ b/tests/Format/Reader/FormatPHPReaderTest.php
@@ -6,7 +6,6 @@
use FormatPHP\Exception\InvalidMessageShapeException;
use FormatPHP\Format\Reader\FormatPHPReader;
-use FormatPHP\MessageCollection;
use FormatPHP\MessageInterface;
use FormatPHP\Test\TestCase;
@@ -49,7 +48,6 @@ public function testInvoke(): void
$collection = $formatReader($data);
- $this->assertInstanceOf(MessageCollection::class, $collection);
$this->assertCount(2, $collection);
$this->assertInstanceOf(MessageInterface::class, $collection['foo']);
$this->assertSame('I am foo', $collection['foo']->getMessage());
diff --git a/tests/Format/Reader/SimpleReaderTest.php b/tests/Format/Reader/SimpleReaderTest.php
index 4f7993b..49c056b 100644
--- a/tests/Format/Reader/SimpleReaderTest.php
+++ b/tests/Format/Reader/SimpleReaderTest.php
@@ -6,7 +6,6 @@
use FormatPHP\Exception\InvalidMessageShapeException;
use FormatPHP\Format\Reader\SimpleReader;
-use FormatPHP\MessageCollection;
use FormatPHP\MessageInterface;
use FormatPHP\Test\TestCase;
@@ -49,7 +48,6 @@ public function testInvoke(): void
$collection = $formatReader($data);
- $this->assertInstanceOf(MessageCollection::class, $collection);
$this->assertCount(2, $collection);
$this->assertInstanceOf(MessageInterface::class, $collection['foo']);
$this->assertSame('I am foo', $collection['foo']->getMessage());
diff --git a/tests/Format/Reader/SmartlingReaderTest.php b/tests/Format/Reader/SmartlingReaderTest.php
index 53372ad..8fbb2b3 100644
--- a/tests/Format/Reader/SmartlingReaderTest.php
+++ b/tests/Format/Reader/SmartlingReaderTest.php
@@ -6,7 +6,6 @@
use FormatPHP\Exception\InvalidMessageShapeException;
use FormatPHP\Format\Reader\SmartlingReader;
-use FormatPHP\MessageCollection;
use FormatPHP\MessageInterface;
use FormatPHP\Test\TestCase;
@@ -49,7 +48,6 @@ public function testInvoke(): void
$collection = $formatReader($data);
- $this->assertInstanceOf(MessageCollection::class, $collection);
$this->assertCount(2, $collection);
$this->assertInstanceOf(MessageInterface::class, $collection['foo']);
$this->assertSame('I am foo', $collection['foo']->getMessage());
diff --git a/tests/FormatPHPTest.php b/tests/FormatPHPTest.php
index 54640de..9f80283 100644
--- a/tests/FormatPHPTest.php
+++ b/tests/FormatPHPTest.php
@@ -102,8 +102,8 @@ public function testFormatMessageUsesDefaultRichTextElements(): void
$locale = new Locale('en-US');
$config = new Config($locale, null, [
'homeLink' => fn (string $text): string => '$text",
- 'italicized' => fn ($text) => "$text ",
+ 'boldface' => fn (string $text) => "$text ",
+ 'italicized' => fn (string $text) => "$text ",
]);
$message = new Message('myMessage', 'Go home , {name}!');
diff --git a/tests/Icu/MessageFormat/Parser/ErrorTest.php b/tests/Icu/MessageFormat/Parser/ErrorTest.php
index 6f4032d..23305e8 100644
--- a/tests/Icu/MessageFormat/Parser/ErrorTest.php
+++ b/tests/Icu/MessageFormat/Parser/ErrorTest.php
@@ -30,37 +30,6 @@ public function testConstructor(): void
$this->assertNull($error->getThrowable());
}
- public function testConstantValues(): void
- {
- $this->assertSame(0, Error::OTHER);
- $this->assertSame(1, Error::EXPECT_ARGUMENT_CLOSING_BRACE);
- $this->assertSame(2, Error::EMPTY_ARGUMENT);
- $this->assertSame(3, Error::MALFORMED_ARGUMENT);
- $this->assertSame(4, Error::EXPECT_ARGUMENT_TYPE);
- $this->assertSame(5, Error::INVALID_ARGUMENT_TYPE);
- $this->assertSame(6, Error::EXPECT_ARGUMENT_STYLE);
- $this->assertSame(7, Error::INVALID_NUMBER_SKELETON);
- $this->assertSame(8, Error::INVALID_DATE_TIME_SKELETON);
- $this->assertSame(9, Error::EXPECT_NUMBER_SKELETON);
- $this->assertSame(10, Error::EXPECT_DATE_TIME_SKELETON);
- $this->assertSame(11, Error::UNCLOSED_QUOTE_IN_ARGUMENT_STYLE);
- $this->assertSame(12, Error::EXPECT_SELECT_ARGUMENT_OPTIONS);
- $this->assertSame(13, Error::EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE);
- $this->assertSame(14, Error::INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);
- $this->assertSame(15, Error::EXPECT_SELECT_ARGUMENT_SELECTOR);
- $this->assertSame(16, Error::EXPECT_PLURAL_ARGUMENT_SELECTOR);
- $this->assertSame(17, Error::EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT);
- $this->assertSame(18, Error::EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT);
- $this->assertSame(19, Error::INVALID_PLURAL_ARGUMENT_SELECTOR);
- $this->assertSame(20, Error::DUPLICATE_PLURAL_ARGUMENT_SELECTOR);
- $this->assertSame(21, Error::DUPLICATE_SELECT_ARGUMENT_SELECTOR);
- $this->assertSame(22, Error::MISSING_OTHER_CLAUSE);
- $this->assertSame(23, Error::INVALID_TAG);
- $this->assertSame(25, Error::INVALID_TAG_NAME);
- $this->assertSame(26, Error::UNMATCHED_CLOSING_TAG);
- $this->assertSame(27, Error::UNCLOSED_TAG);
- }
-
public function testConstructorAcceptsThrowable(): void
{
$start = new LocationDetails(0, 1, 1);
diff --git a/tests/Intl/DateTimeFormatTest.php b/tests/Intl/DateTimeFormatTest.php
index 29dd1aa..ea52555 100644
--- a/tests/Intl/DateTimeFormatTest.php
+++ b/tests/Intl/DateTimeFormatTest.php
@@ -30,7 +30,7 @@ class DateTimeFormatTest extends TestCase
private const TEST_TIMEZONE = 'America/Chicago';
- private ?string $defaultTimezone;
+ private string $defaultTimezone;
protected function setUp(): void
{
@@ -40,7 +40,7 @@ protected function setUp(): void
protected function tearDown(): void
{
- date_default_timezone_set($this->defaultTimezone ?? 'UTC');
+ date_default_timezone_set($this->defaultTimezone);
}
/**
@@ -646,7 +646,7 @@ public static function formatThrowsExceptionWhenDateStyleOrTimeStyleMixedWithSty
];
}
- /** @var array */
+ /** @phpstan-ignore return.type */
return $tests;
}
}
diff --git a/tests/Intl/NumberFormat/PercentTest.php b/tests/Intl/NumberFormat/PercentTest.php
index 62daf5f..062b172 100644
--- a/tests/Intl/NumberFormat/PercentTest.php
+++ b/tests/Intl/NumberFormat/PercentTest.php
@@ -19,6 +19,7 @@
*/
class PercentTest extends TestCase
{
+ /** @phpstan-ignore classConstant.unused */
private const NUMBER = 10000;
private const LOCALES = [
@@ -74,8 +75,9 @@ class PercentTest extends TestCase
*/
public function testFormat(): void
{
- $this->markTestSkipped('Skipped due to differences in ICU version output.');
+ $this->markTestSkipped('Skipping test that fails because of inconsistencies between ICU versions');
+ /** @phpstan-ignore deadCode.unreachable */
$tests = $this->percentPermutationsWithLocales();
$results = [];
diff --git a/tests/MessageLoaderTest.php b/tests/MessageLoaderTest.php
index 5417ff3..c4372d3 100644
--- a/tests/MessageLoaderTest.php
+++ b/tests/MessageLoaderTest.php
@@ -11,7 +11,6 @@
use FormatPHP\Format\ReaderInterface;
use FormatPHP\Intl\Locale;
use FormatPHP\MessageCollection;
-use FormatPHP\MessageInterface;
use FormatPHP\MessageLoader;
use PHPUnit\Framework\Attributes\DataProvider;
@@ -82,7 +81,6 @@ public function testLoadMessagesFallsBackToDefaultLocale(): void
$this->assertGreaterThanOrEqual(1, $collection->count());
$this->assertNotNull($collection['about.inspire']);
- $this->assertInstanceOf(MessageInterface::class, $collection['about.inspire']);
}
public function testLoadMessagesWithFallback(): void
@@ -101,7 +99,6 @@ public function testLoadMessagesWithFallback(): void
$this->assertCount(1, $collection);
$this->assertNotNull($collection['about.inspire']);
- $this->assertInstanceOf(MessageInterface::class, $collection['about.inspire']);
$this->assertSame(
'في Skillshare ، نقوم بتمكين الأعضاء للحصول على الإلهام.',
$collection['about.inspire']->getMessage(),
@@ -126,7 +123,6 @@ public function testLoadMessagesWithCustomReader($customReader): void
$this->assertCount(1, $collection);
$this->assertNotNull($collection['about.inspire']);
- $this->assertInstanceOf(MessageInterface::class, $collection['about.inspire']);
$this->assertSame(
'في Skillshare ، نقوم بتمكين الأعضاء للحصول على الإلهام.',
$collection['about.inspire']->getMessage(),
@@ -165,7 +161,6 @@ public function testLoadMessagesNormalizesFilenames(): void
$this->assertGreaterThanOrEqual(1, $collection->count());
$this->assertNotNull($collection['about.inspire']);
- $this->assertInstanceOf(MessageInterface::class, $collection['about.inspire']);
$this->assertSame(
'[!! Ḁṭ Ṡǩíííĺĺśśśḫâŕŕŕè, ẘè èṁṗṗṗŏẘèèèŕ ṁṁṁèṁḃḃḃèŕśśś ṭŏŏŏ ĝèèèṭ íííńśṗṗṗíŕèèèḋ. !!]',
$collection['about.inspire']->getMessage(),
From 5623d23490ec70a7039caaf59ab772b76d4c51b9 Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Thu, 15 May 2025 01:37:02 -0500
Subject: [PATCH 15/21] chore(deps): bump versions for requirements
---
composer.json | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/composer.json b/composer.json
index fe08d6e..c9a34aa 100644
--- a/composer.json
+++ b/composer.json
@@ -22,11 +22,10 @@
"ext-mbstring": "*",
"myclabs/php-enum": "^1.8.4",
"nikic/php-parser": "^5.4",
- "psr/log": "^1 || ^2",
- "ramsey/collection": "^1.2",
- "symfony/console": "^5.3 || ^6.0",
- "symfony/polyfill-php80": "^1.23",
- "symfony/process": "^5 || ^6.0",
+ "psr/log": "^1 || ^2 || ^3",
+ "ramsey/collection": "^1.2 || ^2.0",
+ "symfony/console": "^6.0 || ^7.0",
+ "symfony/process": "^6.0 || ^7.0",
"webmozart/glob": "^4.4"
},
"require-dev": {
From b6a9d02d826c6a047c6be7940e5a2a3c690524d7 Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Thu, 15 May 2025 01:37:59 -0500
Subject: [PATCH 16/21] chore: set PHP version range to >=8.2 <8.5 and update
workflows
---
.github/workflows/continuous-integration.yml | 64 ++++++++++++--------
composer.json | 14 +++--
2 files changed, 48 insertions(+), 30 deletions(-)
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 22a0e44..4091b55 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -1,6 +1,6 @@
# GitHub Actions Documentation: https://docs.github.com/en/actions
-name: "build"
+name: "Continuous Integration"
on:
push:
@@ -27,17 +27,17 @@ jobs:
runs-on: "ubuntu-latest"
steps:
- name: "Checkout repository"
- uses: "actions/checkout@v4.2.2"
+ uses: "actions/checkout@v4"
- name: "Install PHP"
- uses: "shivammathur/setup-php@2.33.0"
+ uses: "shivammathur/setup-php@v2"
with:
- php-version: "8.3"
- extensions: "intl-73.2"
+ php-version: "8.4"
+ extensions: "intl-76.1"
coverage: "none"
- name: "Install dependencies (Composer)"
- uses: "ramsey/composer-install@3.1.0"
+ uses: "ramsey/composer-install@v3"
- name: "Check syntax (php-parallel-lint)"
run: "composer dev:lint:syntax"
@@ -50,17 +50,17 @@ jobs:
runs-on: "ubuntu-latest"
steps:
- name: "Checkout repository"
- uses: "actions/checkout@v4.2.2"
+ uses: "actions/checkout@v4"
- name: "Install PHP"
- uses: "shivammathur/setup-php@2.33.0"
+ uses: "shivammathur/setup-php@v2"
with:
- php-version: "8.3"
- extensions: "intl-73.2"
+ php-version: "8.4"
+ extensions: "intl-76.1"
coverage: "none"
- name: "Install dependencies (Composer)"
- uses: "ramsey/composer-install@3.1.0"
+ uses: "ramsey/composer-install@v3"
- name: "Statically analyze code (PHPStan)"
run: "composer dev:analyze:phpstan"
@@ -71,24 +71,33 @@ jobs:
runs-on: "ubuntu-latest"
steps:
- name: "Checkout repository"
- uses: "actions/checkout@v4.2.2"
+ uses: "actions/checkout@v4"
- name: "Install PHP"
- uses: "shivammathur/setup-php@2.33.0"
+ uses: "shivammathur/setup-php@v2"
with:
- php-version: "8.3"
- extensions: "intl-73.2"
- coverage: "pcov"
- ini-values: "memory_limit=-1"
+ php-version: "8.4"
+ extensions: "intl-76.1"
+ coverage: "xdebug"
- name: "Install dependencies (Composer)"
- uses: "ramsey/composer-install@3.1.0"
+ uses: "ramsey/composer-install@v3"
- name: "Run unit tests and generate coverage report (PHPUnit)"
run: "composer dev:test:coverage:ci"
- name: "Publish coverage report to Codecov"
- uses: "codecov/codecov-action@v5.4.2"
+ uses: "codecov/codecov-action@v5"
+ with:
+ token: "${{ secrets.CODECOV_TOKEN }}"
+
+ - name: "Upload test results to Codecov"
+ if: ${{ !cancelled() }}
+ uses: "codecov/test-results-action@v1"
+ with:
+ token: "${{ secrets.CODECOV_TOKEN }}"
+ disable_search: true
+ file: "./build/junit.xml"
unit-tests:
name: "Unit tests"
@@ -99,25 +108,28 @@ jobs:
fail-fast: false
matrix:
php-version:
- - "7.4"
- - "8.0"
- - "8.1"
- "8.2"
- "8.3"
+ - "8.4"
+ dependencies:
+ - "lowest"
+ - "highest"
steps:
- name: "Checkout repository"
- uses: "actions/checkout@v4.2.2"
+ uses: "actions/checkout@v4"
- name: "Install PHP"
- uses: "shivammathur/setup-php@2.33.0"
+ uses: "shivammathur/setup-php@v2"
with:
php-version: "${{ matrix.php-version }}"
- extensions: "intl-73.2"
+ extensions: "intl-76.1"
coverage: "none"
- name: "Install dependencies (Composer)"
- uses: "ramsey/composer-install@3.1.0"
+ uses: "ramsey/composer-install@v3"
+ with:
+ dependency-versions: "${{ matrix.dependencies }}"
- name: "Run unit tests (PHPUnit)"
run: "composer dev:test:unit"
diff --git a/composer.json b/composer.json
index c9a34aa..b33a5a2 100644
--- a/composer.json
+++ b/composer.json
@@ -15,8 +15,14 @@
"translate",
"translation"
],
+ "authors": [
+ {
+ "name": "FormatPHP Contributors",
+ "homepage": "https://formatphp.dev"
+ }
+ ],
"require": {
- "php": "^7.4 || ^8",
+ "php": ">=8.2 <8.5",
"ext-intl": "*",
"ext-json": "*",
"ext-mbstring": "*",
@@ -92,7 +98,7 @@
"dev:analyze": [
"@dev:analyze:phpstan"
],
- "dev:analyze:phpstan": "phpstan analyse --ansi --memory-limit='-1'",
+ "dev:analyze:phpstan": "phpstan analyse --ansi --memory-limit 1G",
"dev:build:clean": "git clean -fX build/",
"dev:lint": [
"@dev:lint:syntax",
@@ -106,8 +112,8 @@
"@dev:analyze",
"@dev:test:unit"
],
- "dev:test:coverage:ci": "phpunit --colors=always --coverage-text --coverage-clover build/coverage/clover.xml --coverage-cobertura build/coverage/cobertura.xml --coverage-crap4j build/coverage/crap4j.xml --coverage-xml build/coverage/coverage-xml --log-junit build/junit.xml",
- "dev:test:coverage:html": "phpunit --colors=always --coverage-html build/coverage/coverage-html/",
+ "dev:test:coverage:ci": "@php -d 'xdebug.mode=coverage' vendor/bin/phpunit --colors=always --coverage-text --coverage-clover build/coverage/clover.xml --coverage-cobertura build/coverage/cobertura.xml --coverage-crap4j build/coverage/crap4j.xml --coverage-xml build/coverage/coverage-xml --log-junit build/junit.xml",
+ "dev:test:coverage:html": "@php -d 'xdebug.mode=coverage' vendor/bin/phpunit --colors=always --coverage-html build/coverage/coverage-html/",
"dev:test:unit": "phpunit --colors=always",
"test": "@dev:test"
},
From ea92066edf35cac94b3060122b8a45dde1336baf Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Thu, 15 May 2025 01:39:50 -0500
Subject: [PATCH 17/21] ci: add dependabot auto-merge workflow
---
.github/workflows/merge-me.yml | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
create mode 100644 .github/workflows/merge-me.yml
diff --git a/.github/workflows/merge-me.yml b/.github/workflows/merge-me.yml
new file mode 100644
index 0000000..4ae2f18
--- /dev/null
+++ b/.github/workflows/merge-me.yml
@@ -0,0 +1,29 @@
+# Merge Me! Documentation: https://github.com/ridedott/merge-me-action/
+
+name: "Merge Dependabot PRs"
+
+on:
+ workflow_run:
+ types:
+ - "completed"
+ workflows:
+ - "Continuous Integration"
+
+jobs:
+ merge-me:
+ name: "Merge me!"
+ runs-on: "ubuntu-latest"
+ steps:
+ - name: "Auto-merge"
+ if: ${{ github.event.workflow_run.conclusion == 'success' }}
+ uses: "ridedott/merge-me-action@v2"
+ with:
+ # This must be used as GitHub Actions token does not support pushing
+ # to protected branches.
+ #
+ # Create a token with repository permissions:
+ # https://github.com/settings/tokens/new?scopes=repo&description=Merge+Me!+GitHub+Actions+Workflow
+ #
+ # Set MERGE_TOKEN as an environment variable on your repository:
+ # https://github.com/yourname/repo-name/settings/secrets/actions/new
+ GITHUB_TOKEN: ${{ secrets.MERGE_TOKEN }}
From 7ace376888877b79a67b5919e2df92df166f587c Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Thu, 15 May 2025 01:43:12 -0500
Subject: [PATCH 18/21] ci: skip tests that fail only on GitHub Actions
---
tests/Util/FormatHelperTest.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/Util/FormatHelperTest.php b/tests/Util/FormatHelperTest.php
index bbca94b..9206007 100644
--- a/tests/Util/FormatHelperTest.php
+++ b/tests/Util/FormatHelperTest.php
@@ -135,7 +135,7 @@ public static function invalidReaderProvider(): array
],
'not enough parameters' => [
'reader' => __DIR__ . '/fixtures/reader-closure-invalid-02.php',
- 'shouldSkip' => false,
+ 'shouldSkip' => (fn (): bool => (bool) getenv('GITHUB_ACTIONS'))(),
],
'second param is not array' => [
'reader' => __DIR__ . '/fixtures/reader-closure-invalid-04.php',
@@ -238,7 +238,7 @@ public static function invalidWriterProvider(): array
],
'not enough parameters' => [
'writer' => __DIR__ . '/fixtures/writer-closure-invalid-02.php',
- 'shouldSkip' => false,
+ 'shouldSkip' => (fn (): bool => (bool) getenv('GITHUB_ACTIONS'))(),
],
'first param is not DescriptorCollection' => [
'writer' => __DIR__ . '/fixtures/writer-closure-invalid-03.php',
From 085e64ed76331cc382ee39107c37fd9bec8f9ec5 Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Thu, 15 May 2025 01:49:37 -0500
Subject: [PATCH 19/21] chore: update README badges
---
README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 30e6b5e..4d2d922 100644
--- a/README.md
+++ b/README.md
@@ -5,11 +5,11 @@
-
+
-
-
+
+
From b173142f7fed49495a8261130b1f201ea0aaee05 Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Thu, 15 May 2025 02:14:56 -0500
Subject: [PATCH 20/21] docs: update Read the Docs config and docs structure
---
.readthedocs.yml | 10 +-
docs/.gitignore | 2 +-
docs/Makefile | 4 +-
docs/README.md | 2 +-
docs/conf.py | 110 -----
docs/make.bat | 35 --
docs/requirements.txt | 6 +-
docs/skillshare-logo.svg | 6 -
docs/source/LICENSE | 395 ++++++++++++++++++
docs/{ => source}/_static/css/custom.css | 0
docs/source/conf.py | 79 ++++
docs/{ => source}/copyright.rst | 0
docs/{ => source}/formatting.rst | 0
docs/{ => source}/formatting/dates.rst | 0
.../{ => source}/formatting/display-names.rst | 0
docs/{ => source}/formatting/messages.rst | 0
docs/{ => source}/formatting/numbers.rst | 0
docs/{ => source}/index.rst | 14 +-
docs/{ => source}/quickstart.rst | 0
docs/{ => source}/reference.rst | 0
.../reference/intl-datetimeformatoptions.rst | 0
.../reference/intl-displaynamesoptions.rst | 0
.../reference/intl-numberformatoptions.rst | 0
docs/{ => source}/string-extraction.rst | 0
docs/{ => source}/tms.rst | 0
25 files changed, 490 insertions(+), 173 deletions(-)
delete mode 100644 docs/conf.py
delete mode 100644 docs/make.bat
delete mode 100644 docs/skillshare-logo.svg
create mode 100644 docs/source/LICENSE
rename docs/{ => source}/_static/css/custom.css (100%)
create mode 100644 docs/source/conf.py
rename docs/{ => source}/copyright.rst (100%)
rename docs/{ => source}/formatting.rst (100%)
rename docs/{ => source}/formatting/dates.rst (100%)
rename docs/{ => source}/formatting/display-names.rst (100%)
rename docs/{ => source}/formatting/messages.rst (100%)
rename docs/{ => source}/formatting/numbers.rst (100%)
rename docs/{ => source}/index.rst (75%)
rename docs/{ => source}/quickstart.rst (100%)
rename docs/{ => source}/reference.rst (100%)
rename docs/{ => source}/reference/intl-datetimeformatoptions.rst (100%)
rename docs/{ => source}/reference/intl-displaynamesoptions.rst (100%)
rename docs/{ => source}/reference/intl-numberformatoptions.rst (100%)
rename docs/{ => source}/string-extraction.rst (100%)
rename docs/{ => source}/tms.rst (100%)
diff --git a/.readthedocs.yml b/.readthedocs.yml
index bc50e91..19331ac 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -1,11 +1,13 @@
version: 2
-sphinx:
- configuration: docs/conf.py
+build:
+ os: ubuntu-24.04
+ tools:
+ python: "3.13"
-formats: all
+sphinx:
+ configuration: docs/source/conf.py
python:
- version: 3.7
install:
- requirements: docs/requirements.txt
diff --git a/docs/.gitignore b/docs/.gitignore
index 69fa449..567609b 100644
--- a/docs/.gitignore
+++ b/docs/.gitignore
@@ -1 +1 @@
-_build/
+build/
diff --git a/docs/Makefile b/docs/Makefile
index d4bb2cb..d0c3cbf 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -5,8 +5,8 @@
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
-SOURCEDIR = .
-BUILDDIR = _build
+SOURCEDIR = source
+BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
diff --git a/docs/README.md b/docs/README.md
index 116d67b..98211fe 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -26,5 +26,5 @@ make html
Then, to view the docs after building them:
``` bash
-open _build/html/index.html
+open build/html/index.html
```
diff --git a/docs/conf.py b/docs/conf.py
deleted file mode 100644
index 1b08921..0000000
--- a/docs/conf.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# Configuration file for the Sphinx documentation builder.
-#
-# This file only contains a selection of the most common options. For a full
-# list see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-
-# -- Path setup --------------------------------------------------------------
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-
-import os
-import sphinx_rtd_theme
-import sys
-import datetime
-
-from subprocess import Popen, PIPE
-
-def get_version():
- if os.environ.get('READTHEDOCS') == 'True':
- return os.environ.get('READTHEDOCS_VERSION')
-
- pipe = Popen('git branch | grep \*', stdout=PIPE, shell=True, universal_newlines=True)
- version = pipe.stdout.read()
-
- if version:
- return version[2:]
- else:
- return 'unknown'
-
-
-# -- Project information -----------------------------------------------------
-
-project = 'FormatPHP'
-copyright = '2021-%Y, Skillshare, Inc and FormatPHP Contributors'
-author = 'FormatPHP Contributors'
-
-version = get_version().strip()
-release = version
-
-today_fmt = '%Y-%m-%d'
-
-
-# -- General configuration ---------------------------------------------------
-
-master_doc = 'index'
-highlight_language = 'php'
-highlight_options = {
- 'php': {'startinline': True},
- 'php-annotations': {'startinline': True},
-}
-
-current_year = datetime.date.today().strftime('%Y')
-rst_prolog = """
-.. |current_year| replace:: {0}
-""".format(current_year)
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
- 'sphinx.ext.autodoc',
- 'sphinx.ext.todo',
- 'sphinxcontrib.phpdomain',
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This pattern also affects html_static_path and html_extra_path.
-exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
-
-pygments_style = 'sphinx'
-
-
-# -- Options for HTML output -------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-#
-html_theme = "sphinx_rtd_theme"
-html_theme_options = {
- 'collapse_navigation': False,
- 'display_version': False
-}
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-html_css_files = [
- 'css/custom.css',
-]
-
-html_title = "FormatPHP %s Manual" % get_version()
-html_show_sphinx = False
-
-htmlhelp_basename = 'formatphp-doc'
-
-html_context = {
- "display_github": True,
- "github_user": "formatphp",
- "github_repo": "formatphp",
- "github_version": version,
- "conf_py_path": "/docs/",
-}
diff --git a/docs/make.bat b/docs/make.bat
deleted file mode 100644
index 8084272..0000000
--- a/docs/make.bat
+++ /dev/null
@@ -1,35 +0,0 @@
-@ECHO OFF
-
-pushd %~dp0
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
- set SPHINXBUILD=sphinx-build
-)
-set SOURCEDIR=.
-set BUILDDIR=_build
-
-if "%1" == "" goto help
-
-%SPHINXBUILD% >NUL 2>NUL
-if errorlevel 9009 (
- echo.
- echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
- echo.installed, then set the SPHINXBUILD environment variable to point
- echo.to the full path of the 'sphinx-build' executable. Alternatively you
- echo.may add the Sphinx directory to PATH.
- echo.
- echo.If you don't have Sphinx installed, grab it from
- echo.https://www.sphinx-doc.org/
- exit /b 1
-)
-
-%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-goto end
-
-:help
-%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-
-:end
-popd
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 64c33ad..30900e8 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1,3 +1,3 @@
-Sphinx==4.4.0
-sphinx-rtd-theme==1.0.0
-sphinxcontrib-phpdomain==0.8.0
+sphinx==8.2.3
+sphinx-rtd-theme==3.0.2
+sphinxcontrib-phpdomain==0.13.0
diff --git a/docs/skillshare-logo.svg b/docs/skillshare-logo.svg
deleted file mode 100644
index 4ba58a8..0000000
--- a/docs/skillshare-logo.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/source/LICENSE b/docs/source/LICENSE
new file mode 100644
index 0000000..4ea99c2
--- /dev/null
+++ b/docs/source/LICENSE
@@ -0,0 +1,395 @@
+Attribution 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are
+ intended for use by those authorized to give the public
+ permission to use material in ways otherwise restricted by
+ copyright and certain other rights. Our licenses are
+ irrevocable. Licensors should read and understand the terms
+ and conditions of the license they choose before applying it.
+ Licensors should also secure all rights necessary before
+ applying our licenses so that the public can reuse the
+ material as expected. Licensors should clearly mark any
+ material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If
+ the licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain
+ other rights that a licensor has authority to grant. Use of
+ the licensed material may still be restricted for other
+ reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests,
+ such as asking that all changes be marked or described.
+ Although not required by our licenses, you are encouraged to
+ respect those requests where reasonable. More considerations
+ for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution 4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution 4.0 International Public License ("Public License"). To the
+extent this Public License may be interpreted as a contract, You are
+granted the Licensed Rights in consideration of Your acceptance of
+these terms and conditions, and the Licensor grants You such rights in
+consideration of benefits the Licensor receives from making the
+Licensed Material available under these terms and conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner requiring
+ permission under the Copyright and Similar Rights held by the
+ Licensor. For purposes of this Public License, where the Licensed
+ Material is a musical work, performance, or sound recording,
+ Adapted Material is always produced where the Licensed Material is
+ synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. Copyright and Similar Rights means copyright and/or similar rights
+ closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or
+ categorized. For purposes of this Public License, the rights
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
+ Rights.
+
+ d. Effective Technological Measures means those measures that, in the
+ absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright
+ Treaty adopted on December 20, 1996, and/or similar international
+ agreements.
+
+ e. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ f. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ g. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ h. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ i. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the
+ public may access the material from a place and at a time
+ individually chosen by them.
+
+ j. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially
+ equivalent rights anywhere in the world.
+
+ k. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part; and
+
+ b. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public
+ License does not apply, and You do not need to comply with
+ its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section
+ 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter created,
+ and to make technical modifications necessary to do so. The
+ Licensor waives and/or agrees not to assert any right or
+ authority to forbid You from making technical modifications
+ necessary to exercise the Licensed Rights, including
+ technical modifications necessary to circumvent Effective
+ Technological Measures. For purposes of this Public License,
+ simply making modifications authorized by this Section 2(a)
+ (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or
+ may be construed as permission to assert or imply that You
+ are, or that Your use of the Licensed Material is, connected
+ with, or sponsored, endorsed, or granted official status by,
+ the Licensor or others designated to receive attribution as
+ provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however, to
+ the extent possible, the Licensor waives and/or agrees not to
+ assert any such rights held by the Licensor to the limited
+ extent necessary to allow You to exercise the Licensed
+ Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may be
+ reasonable to satisfy the conditions by providing a URI or
+ hyperlink to a resource that includes the required
+ information.
+
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ 4. If You Share Adapted Material You produce, the Adapter's
+ License You apply must not prevent recipients of the Adapted
+ Material from complying with this Public License.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material; and
+
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under
+ Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided
+ it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is
+ deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
diff --git a/docs/_static/css/custom.css b/docs/source/_static/css/custom.css
similarity index 100%
rename from docs/_static/css/custom.css
rename to docs/source/_static/css/custom.css
diff --git a/docs/source/conf.py b/docs/source/conf.py
new file mode 100644
index 0000000..a6918f0
--- /dev/null
+++ b/docs/source/conf.py
@@ -0,0 +1,79 @@
+# Configuration file for the Sphinx documentation builder.
+
+import os
+import sphinx_rtd_theme
+import sys
+import datetime
+
+from pygments.lexers.web import PhpLexer
+from sphinx.highlighting import lexers
+from subprocess import Popen, PIPE
+
+def get_version():
+ if os.environ.get('READTHEDOCS') == 'True':
+ return os.environ.get('READTHEDOCS_VERSION')
+
+ pipe = Popen('git branch | grep \\*', stdout=PIPE, shell=True, universal_newlines=True)
+ version = pipe.stdout.read()
+
+ if version:
+ return version[2:]
+ else:
+ return 'unknown'
+
+# -- Project information
+project = 'FormatPHP'
+copyright = '2021-%Y, Skillshare, Inc and FormatPHP Contributors'
+author = 'FormatPHP Contributors'
+
+version = get_version().strip()
+release = version
+
+today_fmt = '%Y-%m-%d'
+
+# -- General configuration
+numfig = True
+highlight_language = 'php'
+highlight_options = {
+ 'php': {'startinline': True},
+}
+primary_domain = 'php'
+maximum_signature_line_length = 100
+templates_path = ['_templates']
+pygments_style = 'sphinx'
+
+current_year = datetime.date.today().strftime('%Y')
+rst_prolog = """
+.. |current_year| replace:: {0}
+""".format(current_year)
+
+extensions = [
+ 'sphinx.ext.autosummary',
+ 'sphinx.ext.duration',
+ 'sphinx.ext.todo',
+ 'sphinxcontrib.phpdomain',
+]
+
+todo_include_todos = True
+
+# -- Options for HTML output
+html_theme = 'sphinx_rtd_theme'
+html_theme_options = {
+ 'version_selector': True,
+ 'includehidden': False,
+ 'collapse_navigation': False,
+}
+html_static_path = ['_static']
+html_css_files = ['css/custom.css']
+html_title = 'FormatPHP, %s' % get_version()
+html_short_title = 'FormatPHP'
+html_context = {
+ 'display_github': True,
+ 'github_user': 'formatphp',
+ 'github_repo': 'formatphp',
+ 'github_version': version,
+ 'conf_py_path': '/docs/source/',
+}
+
+# -- Options for EPUB output
+epub_show_urls = 'footnote'
diff --git a/docs/copyright.rst b/docs/source/copyright.rst
similarity index 100%
rename from docs/copyright.rst
rename to docs/source/copyright.rst
diff --git a/docs/formatting.rst b/docs/source/formatting.rst
similarity index 100%
rename from docs/formatting.rst
rename to docs/source/formatting.rst
diff --git a/docs/formatting/dates.rst b/docs/source/formatting/dates.rst
similarity index 100%
rename from docs/formatting/dates.rst
rename to docs/source/formatting/dates.rst
diff --git a/docs/formatting/display-names.rst b/docs/source/formatting/display-names.rst
similarity index 100%
rename from docs/formatting/display-names.rst
rename to docs/source/formatting/display-names.rst
diff --git a/docs/formatting/messages.rst b/docs/source/formatting/messages.rst
similarity index 100%
rename from docs/formatting/messages.rst
rename to docs/source/formatting/messages.rst
diff --git a/docs/formatting/numbers.rst b/docs/source/formatting/numbers.rst
similarity index 100%
rename from docs/formatting/numbers.rst
rename to docs/source/formatting/numbers.rst
diff --git a/docs/index.rst b/docs/source/index.rst
similarity index 75%
rename from docs/index.rst
rename to docs/source/index.rst
index 023004d..196af5a 100644
--- a/docs/index.rst
+++ b/docs/source/index.rst
@@ -1,16 +1,8 @@
.. _index:
-================
-FormatPHP Manual
-================
-
-For `formatphp/formatphp `_ |version|. Updated on |today|.
-
-This work is licensed under the `Creative Commons Attribution 4.0 International
- `_ license.
-
-Welcome!
---------
+=========
+FormatPHP
+=========
Inspired by `FormatJS`_ and `ECMAScript 2023 Internationalization API (ECMA-402)`_,
FormatPHP provides an API to format dates, numbers, and strings, including
diff --git a/docs/quickstart.rst b/docs/source/quickstart.rst
similarity index 100%
rename from docs/quickstart.rst
rename to docs/source/quickstart.rst
diff --git a/docs/reference.rst b/docs/source/reference.rst
similarity index 100%
rename from docs/reference.rst
rename to docs/source/reference.rst
diff --git a/docs/reference/intl-datetimeformatoptions.rst b/docs/source/reference/intl-datetimeformatoptions.rst
similarity index 100%
rename from docs/reference/intl-datetimeformatoptions.rst
rename to docs/source/reference/intl-datetimeformatoptions.rst
diff --git a/docs/reference/intl-displaynamesoptions.rst b/docs/source/reference/intl-displaynamesoptions.rst
similarity index 100%
rename from docs/reference/intl-displaynamesoptions.rst
rename to docs/source/reference/intl-displaynamesoptions.rst
diff --git a/docs/reference/intl-numberformatoptions.rst b/docs/source/reference/intl-numberformatoptions.rst
similarity index 100%
rename from docs/reference/intl-numberformatoptions.rst
rename to docs/source/reference/intl-numberformatoptions.rst
diff --git a/docs/string-extraction.rst b/docs/source/string-extraction.rst
similarity index 100%
rename from docs/string-extraction.rst
rename to docs/source/string-extraction.rst
diff --git a/docs/tms.rst b/docs/source/tms.rst
similarity index 100%
rename from docs/tms.rst
rename to docs/source/tms.rst
From fcc603a3bd38f19dd4e4824a5c535ea77c1599b4 Mon Sep 17 00:00:00 2001
From: Ben Ramsey
Date: Thu, 15 May 2025 02:20:28 -0500
Subject: [PATCH 21/21] chore: rename develop branch to main
---
.github/workflows/continuous-integration.yml | 4 ++--
README.md | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 4091b55..2777c90 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -5,12 +5,12 @@ name: "Continuous Integration"
on:
push:
branches:
- - "develop"
+ - "main"
tags:
- "*"
pull_request:
branches:
- - "develop"
+ - "main"
# Cancels all previous workflow runs for the same branch that have not yet completed.
concurrency:
diff --git a/README.md b/README.md
index 4d2d922..694da3d 100644
--- a/README.md
+++ b/README.md
@@ -8,8 +8,8 @@
-
-
+
+