From e4f993addd47c12fc305a60e87fe9101be97e206 Mon Sep 17 00:00:00 2001 From: sasezaki Date: Sun, 23 Nov 2025 18:35:43 +0900 Subject: [PATCH 1/2] Add composer-dependency-analyser --- README.md | 1 + src/tools.ts | 84 ++++++++++--------- src/tools/composerDependencyAnalyser.ts | 11 +++ .../.laminas-ci.json | 3 + .../composer-dependency-analyser.php | 9 ++ .../matrix.json | 10 +++ .../test.env | 3 + 7 files changed, 80 insertions(+), 41 deletions(-) create mode 100644 src/tools/composerDependencyAnalyser.ts create mode 100644 tests/code-check-composer-dependency-analyser/.laminas-ci.json create mode 100644 tests/code-check-composer-dependency-analyser/composer-dependency-analyser.php create mode 100644 tests/code-check-composer-dependency-analyser/matrix.json create mode 100644 tests/code-check-composer-dependency-analyser/test.env diff --git a/README.md b/README.md index 4022d85a..13d1ae14 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ Currently, it identifies the following: - Psalm checks based on the presence of `psalm.xml.dist` or `psalm.xml` files. - PHPStan checks based on the presence of `phpstan.neon`, `phpstan.neon.dist` or `phpstan.dist.neon` files. - ComposerRequireChecker checks based on the presence of `composer-require-checker.json` file. +- Composer dependency analysis based on the presence of `composer-dependency-analyser.php` file. - phpbench benchmarks based on the presence of a `phpbench.json`. - Infection mutation tests based on the presence of `infection.json` or `infection.json.dist`. In case that `roave/infection-static-analysis-plugin` is installed, this will be used instead. - Markdown documentation based on the presence of a `mkdocs.yml` and/or markdown files in the `doc/book/` or `doc/books/` trees. diff --git a/src/tools.ts b/src/tools.ts index 8fb5dafc..e630143b 100644 --- a/src/tools.ts +++ b/src/tools.ts @@ -1,17 +1,18 @@ -import fs, {PathLike} from 'fs'; -import {Config} from './config/app'; -import {CONTAINER_DEFAULT_PHP_VERSION} from './config/php'; -import {PHPUnitTool} from './tools/phpunit'; -import {InfectionTool} from './tools/infection'; -import {PhpCodeSnifferTool} from './tools/codesniffer'; -import {PsalmTool} from './tools/psalm'; -import {ComposerRequireCheckerTool} from './tools/composerRequireChecker'; -import {PhpBenchTool} from './tools/phpbench'; -import {CodeceptionTool} from './tools/codeception'; -import {PhpCsFixerTool} from './tools/phpCsFixer'; -import {PHPStanTool} from './tools/phpstan'; -import {ToolExecutionType} from './enum/toolExecutionType'; -import {ToolType} from './enum/toolType'; +import fs, { PathLike } from 'fs'; +import { Config } from './config/app'; +import { CONTAINER_DEFAULT_PHP_VERSION } from './config/php'; +import { PHPUnitTool } from './tools/phpunit'; +import { InfectionTool } from './tools/infection'; +import { PhpCodeSnifferTool } from './tools/codesniffer'; +import { PsalmTool } from './tools/psalm'; +import { ComposerRequireCheckerTool } from './tools/composerRequireChecker'; +import { ComposerDependencyAnalyser } from './tools/composerDependencyAnalyser'; +import { PhpBenchTool } from './tools/phpbench'; +import { CodeceptionTool } from './tools/codeception'; +import { PhpCsFixerTool } from './tools/phpCsFixer'; +import { PHPStanTool } from './tools/phpstan'; +import { ToolExecutionType } from './enum/toolExecutionType'; +import { ToolType } from './enum/toolType'; export type Tool = { executionType: ToolExecutionType, @@ -36,50 +37,51 @@ function backwardCompatibilityCheckTool(config: Config): ToolRunningContainerDef } return { - executionType : ToolExecutionType.STATIC, - name : 'Backward Compatibility Check', - command : `roave-backward-compatibility-check --from=${ config.baseReference } --install-development-dependencies`, - filesToCheck : [ 'composer.json' ], - toolType : ToolType.CODE_CHECK, - php : CONTAINER_DEFAULT_PHP_VERSION, + executionType: ToolExecutionType.STATIC, + name: 'Backward Compatibility Check', + command: `roave-backward-compatibility-check --from=${config.baseReference} --install-development-dependencies`, + filesToCheck: ['composer.json'], + toolType: ToolType.CODE_CHECK, + php: CONTAINER_DEFAULT_PHP_VERSION, } as ToolRunningContainerDefaultPhpVersion; } export default function createTools(config: Config): Array { const tools = [ { - executionType : ToolExecutionType.STATIC, - name : 'Documentation Linting', - command : "markdownlint 'doc/book/**/*.md'", - filesToCheck : [ 'doc/book/' ], - toolType : ToolType.LINTER, + executionType: ToolExecutionType.STATIC, + name: 'Documentation Linting', + command: "markdownlint 'doc/book/**/*.md'", + filesToCheck: ['doc/book/'], + toolType: ToolType.LINTER, }, { - executionType : ToolExecutionType.STATIC, - name : 'Documentation Linting', - command : "markdownlint 'docs/book/**/*.md'", - filesToCheck : [ 'docs/book/' ], - toolType : ToolType.LINTER, + executionType: ToolExecutionType.STATIC, + name: 'Documentation Linting', + command: "markdownlint 'docs/book/**/*.md'", + filesToCheck: ['docs/book/'], + toolType: ToolType.LINTER, }, { - executionType : ToolExecutionType.STATIC, - name : 'MkDocs Linting', - command : 'yamllint -d relaxed --no-warnings mkdocs.yml', - filesToCheck : [ 'mkdocs.yml' ], - toolType : ToolType.LINTER, + executionType: ToolExecutionType.STATIC, + name: 'MkDocs Linting', + command: 'yamllint -d relaxed --no-warnings mkdocs.yml', + filesToCheck: ['mkdocs.yml'], + toolType: ToolType.LINTER, }, { - executionType : ToolExecutionType.STATIC, - name : 'README Linting', - command : 'markdownlint README.md', - filesToCheck : [ 'README.md' ], - toolType : ToolType.LINTER, + executionType: ToolExecutionType.STATIC, + name: 'README Linting', + command: 'markdownlint README.md', + filesToCheck: ['README.md'], + toolType: ToolType.LINTER, }, PHPUnitTool, InfectionTool, PhpCodeSnifferTool, PsalmTool, ComposerRequireCheckerTool, + ComposerDependencyAnalyser, PhpBenchTool, CodeceptionTool, PhpCsFixerTool, @@ -100,7 +102,7 @@ export default function createTools(config: Config): Array { export function removeNonExistentFilesToCheck(tool: Tool): Tool { return { ...tool, - filesToCheck : tool.filesToCheck.filter((file) => fs.existsSync(file)) + filesToCheck: tool.filesToCheck.filter((file) => fs.existsSync(file)) }; } diff --git a/src/tools/composerDependencyAnalyser.ts b/src/tools/composerDependencyAnalyser.ts new file mode 100644 index 00000000..81fa739c --- /dev/null +++ b/src/tools/composerDependencyAnalyser.ts @@ -0,0 +1,11 @@ +import { ToolType } from '../enum/toolType'; +import { ToolExecutionType } from '../enum/toolExecutionType'; + +export const ComposerDependencyAnalyser = { + executionType: ToolExecutionType.STATIC, + name: 'Composer Dependency Analyser', + command: './vendor/bin/composer-dependency-analyser', + filesToCheck: ['composer-dependency-analyser.php'], + toolType: ToolType.CODE_CHECK, +}; + diff --git a/tests/code-check-composer-dependency-analyser/.laminas-ci.json b/tests/code-check-composer-dependency-analyser/.laminas-ci.json new file mode 100644 index 00000000..8aec558a --- /dev/null +++ b/tests/code-check-composer-dependency-analyser/.laminas-ci.json @@ -0,0 +1,3 @@ +{ + "stablePHP": "7.4" +} \ No newline at end of file diff --git a/tests/code-check-composer-dependency-analyser/composer-dependency-analyser.php b/tests/code-check-composer-dependency-analyser/composer-dependency-analyser.php new file mode 100644 index 00000000..16838b4a --- /dev/null +++ b/tests/code-check-composer-dependency-analyser/composer-dependency-analyser.php @@ -0,0 +1,9 @@ + Date: Sun, 23 Nov 2025 19:37:14 +0900 Subject: [PATCH 2/2] manually fix --- .agent/workflows/typescript-edit.md | 19 ++++ README.md | 2 +- src/tools.ts | 86 +++++++++---------- .../test.env | 3 - 4 files changed, 63 insertions(+), 47 deletions(-) create mode 100644 .agent/workflows/typescript-edit.md diff --git a/.agent/workflows/typescript-edit.md b/.agent/workflows/typescript-edit.md new file mode 100644 index 00000000..9dde673c --- /dev/null +++ b/.agent/workflows/typescript-edit.md @@ -0,0 +1,19 @@ +--- +description: TypeScriptファイル編集後の自動整形 +--- + +# TypeScriptファイル編集後のワークフロー + +TypeScriptファイル(`.ts`)を編集した後は、以下の手順を実行してください。 + +## 手順 + +1. TypeScriptファイルの編集を完了する + +// turbo +2. Lintと自動修正を実行する +```bash +npm run lint-fix +``` + +これにより、コードスタイルが自動的に整形され、修正可能なlintエラーが修正されます。 diff --git a/README.md b/README.md index 13d1ae14..a0928ca2 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Currently, it identifies the following: - Psalm checks based on the presence of `psalm.xml.dist` or `psalm.xml` files. - PHPStan checks based on the presence of `phpstan.neon`, `phpstan.neon.dist` or `phpstan.dist.neon` files. - ComposerRequireChecker checks based on the presence of `composer-require-checker.json` file. -- Composer dependency analysis based on the presence of `composer-dependency-analyser.php` file. +- composer-dependency-analyser checks based on the presence of `composer-dependency-analyser.php` file. - phpbench benchmarks based on the presence of a `phpbench.json`. - Infection mutation tests based on the presence of `infection.json` or `infection.json.dist`. In case that `roave/infection-static-analysis-plugin` is installed, this will be used instead. - Markdown documentation based on the presence of a `mkdocs.yml` and/or markdown files in the `doc/book/` or `doc/books/` trees. diff --git a/src/tools.ts b/src/tools.ts index e630143b..a99a01da 100644 --- a/src/tools.ts +++ b/src/tools.ts @@ -1,18 +1,18 @@ -import fs, { PathLike } from 'fs'; -import { Config } from './config/app'; -import { CONTAINER_DEFAULT_PHP_VERSION } from './config/php'; -import { PHPUnitTool } from './tools/phpunit'; -import { InfectionTool } from './tools/infection'; -import { PhpCodeSnifferTool } from './tools/codesniffer'; -import { PsalmTool } from './tools/psalm'; -import { ComposerRequireCheckerTool } from './tools/composerRequireChecker'; -import { ComposerDependencyAnalyser } from './tools/composerDependencyAnalyser'; -import { PhpBenchTool } from './tools/phpbench'; -import { CodeceptionTool } from './tools/codeception'; -import { PhpCsFixerTool } from './tools/phpCsFixer'; -import { PHPStanTool } from './tools/phpstan'; -import { ToolExecutionType } from './enum/toolExecutionType'; -import { ToolType } from './enum/toolType'; +import fs, {PathLike} from 'fs'; +import {Config} from './config/app'; +import {CONTAINER_DEFAULT_PHP_VERSION} from './config/php'; +import {PHPUnitTool} from './tools/phpunit'; +import {InfectionTool} from './tools/infection'; +import {PhpCodeSnifferTool} from './tools/codesniffer'; +import {PsalmTool} from './tools/psalm'; +import {ComposerRequireCheckerTool} from './tools/composerRequireChecker'; +import {ComposerDependencyAnalyser} from './tools/composerDependencyAnalyser'; +import {PhpBenchTool} from './tools/phpbench'; +import {CodeceptionTool} from './tools/codeception'; +import {PhpCsFixerTool} from './tools/phpCsFixer'; +import {PHPStanTool} from './tools/phpstan'; +import {ToolExecutionType} from './enum/toolExecutionType'; +import {ToolType} from './enum/toolType'; export type Tool = { executionType: ToolExecutionType, @@ -37,44 +37,44 @@ function backwardCompatibilityCheckTool(config: Config): ToolRunningContainerDef } return { - executionType: ToolExecutionType.STATIC, - name: 'Backward Compatibility Check', - command: `roave-backward-compatibility-check --from=${config.baseReference} --install-development-dependencies`, - filesToCheck: ['composer.json'], - toolType: ToolType.CODE_CHECK, - php: CONTAINER_DEFAULT_PHP_VERSION, + executionType : ToolExecutionType.STATIC, + name : 'Backward Compatibility Check', + command : `roave-backward-compatibility-check --from=${ config.baseReference } --install-development-dependencies`, + filesToCheck : [ 'composer.json' ], + toolType : ToolType.CODE_CHECK, + php : CONTAINER_DEFAULT_PHP_VERSION, } as ToolRunningContainerDefaultPhpVersion; } export default function createTools(config: Config): Array { const tools = [ { - executionType: ToolExecutionType.STATIC, - name: 'Documentation Linting', - command: "markdownlint 'doc/book/**/*.md'", - filesToCheck: ['doc/book/'], - toolType: ToolType.LINTER, + executionType : ToolExecutionType.STATIC, + name : 'Documentation Linting', + command : "markdownlint 'doc/book/**/*.md'", + filesToCheck : [ 'doc/book/' ], + toolType : ToolType.LINTER, }, { - executionType: ToolExecutionType.STATIC, - name: 'Documentation Linting', - command: "markdownlint 'docs/book/**/*.md'", - filesToCheck: ['docs/book/'], - toolType: ToolType.LINTER, + executionType : ToolExecutionType.STATIC, + name : 'Documentation Linting', + command : "markdownlint 'docs/book/**/*.md'", + filesToCheck : [ 'docs/book/' ], + toolType : ToolType.LINTER, }, { - executionType: ToolExecutionType.STATIC, - name: 'MkDocs Linting', - command: 'yamllint -d relaxed --no-warnings mkdocs.yml', - filesToCheck: ['mkdocs.yml'], - toolType: ToolType.LINTER, + executionType : ToolExecutionType.STATIC, + name : 'MkDocs Linting', + command : 'yamllint -d relaxed --no-warnings mkdocs.yml', + filesToCheck : [ 'mkdocs.yml' ], + toolType : ToolType.LINTER, }, { - executionType: ToolExecutionType.STATIC, - name: 'README Linting', - command: 'markdownlint README.md', - filesToCheck: ['README.md'], - toolType: ToolType.LINTER, + executionType : ToolExecutionType.STATIC, + name : 'README Linting', + command : 'markdownlint README.md', + filesToCheck : [ 'README.md' ], + toolType : ToolType.LINTER, }, PHPUnitTool, InfectionTool, @@ -102,10 +102,10 @@ export default function createTools(config: Config): Array { export function removeNonExistentFilesToCheck(tool: Tool): Tool { return { ...tool, - filesToCheck: tool.filesToCheck.filter((file) => fs.existsSync(file)) + filesToCheck : tool.filesToCheck.filter((file) => fs.existsSync(file)) }; } export function isToolRunningContainerDefaultPhpVersion(tool: Tool): tool is ToolRunningContainerDefaultPhpVersion { return (tool as ToolRunningContainerDefaultPhpVersion).php === CONTAINER_DEFAULT_PHP_VERSION; -} +} \ No newline at end of file diff --git a/tests/code-check-composer-dependency-analyser/test.env b/tests/code-check-composer-dependency-analyser/test.env index 93263396..e69de29b 100644 --- a/tests/code-check-composer-dependency-analyser/test.env +++ b/tests/code-check-composer-dependency-analyser/test.env @@ -1,3 +0,0 @@ -GITHUB_REF=refs/heads/my-branch -GITHUB_BASE_REF= -GITHUB_EVENT_NAME=push