From 4e6b69fe559911debdbc5aaa19c2faba15ce21e3 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 7 Nov 2024 17:20:38 +0100 Subject: [PATCH 1/3] Added rule identifiers --- src/Rules/QueryPlanAnalyzerRule.php | 6 +++++- .../SyntaxErrorInDibiPreparedStatementMethodRule.php | 11 ++++++----- .../SyntaxErrorInPreparedStatementMethodRule.php | 9 +++++---- src/Rules/SyntaxErrorInQueryFunctionRule.php | 4 ++-- src/Rules/SyntaxErrorInQueryMethodRule.php | 4 ++-- 5 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/Rules/QueryPlanAnalyzerRule.php b/src/Rules/QueryPlanAnalyzerRule.php index 67263885..25dbf0ec 100644 --- a/src/Rules/QueryPlanAnalyzerRule.php +++ b/src/Rules/QueryPlanAnalyzerRule.php @@ -10,6 +10,7 @@ use PhpParser\Node\Expr\New_; use PhpParser\Node\Name\FullyQualified; use PHPStan\Analyser\Scope; +use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -100,7 +101,7 @@ public function processNode(Node $callLike, Scope $scope): array /** * @param MethodCall|New_ $callLike * - * @return RuleError[] + * @return list */ private function analyze(CallLike $callLike, Scope $scope): array { @@ -144,6 +145,7 @@ private function analyze(CallLike $callLike, Scope $scope): array $table ) ) + ->identifier('dba.missingIndex') ->line($callLike->getStartLine()) ->tip('see Mysql Docs https://dev.mysql.com/doc/refman/8.0/en/select-optimization.html') ->build(); @@ -156,6 +158,7 @@ private function analyze(CallLike $callLike, Scope $scope): array $table ) ) + ->identifier('dba.tableScan') ->line($callLike->getStartLine()) ->tip('see Mysql Docs https://dev.mysql.com/doc/refman/8.0/en/table-scan-avoidance.html') ->build(); @@ -168,6 +171,7 @@ private function analyze(CallLike $callLike, Scope $scope): array $table ) ) + ->identifier('dba.unindexedReads') ->line($callLike->getStartLine()) ->tip('see Mysql Docs https://dev.mysql.com/doc/refman/8.0/en/select-optimization.html') ->build(); diff --git a/src/Rules/SyntaxErrorInDibiPreparedStatementMethodRule.php b/src/Rules/SyntaxErrorInDibiPreparedStatementMethodRule.php index ac9df42e..a80bf232 100644 --- a/src/Rules/SyntaxErrorInDibiPreparedStatementMethodRule.php +++ b/src/Rules/SyntaxErrorInDibiPreparedStatementMethodRule.php @@ -11,6 +11,7 @@ use PhpParser\Node\Name\FullyQualified; use PHPStan\Analyser\Scope; use PHPStan\Reflection\MethodReflection; +use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -92,7 +93,7 @@ public function processNode(Node $callLike, Scope $scope): array /** * @param MethodCall|New_ $callLike * - * @return RuleError[] + * @return list */ private function checkErrors(CallLike $callLike, Scope $scope, MethodReflection $methodReflection): array { @@ -171,7 +172,7 @@ private function checkErrors(CallLike $callLike, Scope $scope, MethodReflection } return [ - RuleErrorBuilder::message($placeholderExpectation . ', ' . $parameterActual . '.')->line($callLike->getStartLine())->build(), + RuleErrorBuilder::message($placeholderExpectation . ', ' . $parameterActual . '.')->identifier('dba.placeholderMismatch')->line($callLike->getStartLine())->build(), ]; } } @@ -196,7 +197,7 @@ private function checkErrors(CallLike $callLike, Scope $scope, MethodReflection $validity = $queryReflection->validateQueryString($queryParameters[0]); if (null !== $validity) { - return [RuleErrorBuilder::message($validity->asRuleMessage())->line($callLike->getStartLine())->build()]; + return [RuleErrorBuilder::message($validity->asRuleMessage())->identifier('dba.syntaxError')->line($callLike->getStartLine())->build()]; } $result = $queryReflection->getResultType($queryParameters[0], QueryReflector::FETCH_TYPE_BOTH); @@ -206,11 +207,11 @@ private function checkErrors(CallLike $callLike, Scope $scope, MethodReflection $columnsInResult = \count($result->getValueTypes()) / 2; if ('fetchPairs' === $methodReflection->getName() && 2 !== $columnsInResult) { - return [RuleErrorBuilder::message('fetchPairs requires exactly 2 selected columns, got ' . $columnsInResult . '.')->line($callLike->getStartLine())->build()]; + return [RuleErrorBuilder::message('fetchPairs requires exactly 2 selected columns, got ' . $columnsInResult . '.')->identifier('dba.error')->line($callLike->getStartLine())->build()]; } if ('fetchSingle' === $methodReflection->getName() && 1 !== $columnsInResult) { - return [RuleErrorBuilder::message('fetchSingle requires exactly 1 selected column, got ' . $columnsInResult . '.')->line($callLike->getStartLine())->build()]; + return [RuleErrorBuilder::message('fetchSingle requires exactly 1 selected column, got ' . $columnsInResult . '.')->identifier('dba.error')->line($callLike->getStartLine())->build()]; } } diff --git a/src/Rules/SyntaxErrorInPreparedStatementMethodRule.php b/src/Rules/SyntaxErrorInPreparedStatementMethodRule.php index 22acdddc..adb90385 100644 --- a/src/Rules/SyntaxErrorInPreparedStatementMethodRule.php +++ b/src/Rules/SyntaxErrorInPreparedStatementMethodRule.php @@ -10,6 +10,7 @@ use PhpParser\Node\Expr\New_; use PhpParser\Node\Name\FullyQualified; use PHPStan\Analyser\Scope; +use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -89,7 +90,7 @@ public function processNode(Node $callLike, Scope $scope): array /** * @param MethodCall|New_ $callLike * - * @return RuleError[] + * @return list */ private function checkErrors(CallLike $callLike, Scope $scope): array { @@ -113,7 +114,7 @@ private function checkErrors(CallLike $callLike, Scope $scope): array $parameters = $queryReflection->resolveParameters($parameterTypes) ?? []; } catch (UnresolvableQueryException $exception) { return [ - RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->line($callLike->getStartLine())->build(), + RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->identifier('dba.unresolvableQuery')->line($callLike->getStartLine())->build(), ]; } } @@ -144,13 +145,13 @@ private function checkErrors(CallLike $callLike, Scope $scope): array $ruleErrors = []; foreach ($errors as $error) { - $ruleErrors[] = RuleErrorBuilder::message($error)->line($callLike->getStartLine())->build(); + $ruleErrors[] = RuleErrorBuilder::message($error)->identifier('dba.syntaxError')->line($callLike->getStartLine())->build(); } return $ruleErrors; } catch (UnresolvableQueryException $exception) { return [ - RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->line($callLike->getStartLine())->build(), + RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->identifier('dba.unresolvableQuery')->line($callLike->getStartLine())->build(), ]; } } diff --git a/src/Rules/SyntaxErrorInQueryFunctionRule.php b/src/Rules/SyntaxErrorInQueryFunctionRule.php index cb4938ad..a17a7041 100644 --- a/src/Rules/SyntaxErrorInQueryFunctionRule.php +++ b/src/Rules/SyntaxErrorInQueryFunctionRule.php @@ -96,13 +96,13 @@ public function processNode(Node $node, Scope $scope): array $queryError = $queryReflection->validateQueryString($queryString); if (null !== $queryError) { return [ - RuleErrorBuilder::message($queryError->asRuleMessage())->line($node->getStartLine())->build(), + RuleErrorBuilder::message($queryError->asRuleMessage())->identifier('dba.syntaxError')->line($node->getStartLine())->build(), ]; } } } catch (UnresolvableQueryException $exception) { return [ - RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->line($node->getStartLine())->build(), + RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->identifier('dba.unresolvableQuery')->line($node->getStartLine())->build(), ]; } diff --git a/src/Rules/SyntaxErrorInQueryMethodRule.php b/src/Rules/SyntaxErrorInQueryMethodRule.php index c19bdd52..b1dd12f5 100644 --- a/src/Rules/SyntaxErrorInQueryMethodRule.php +++ b/src/Rules/SyntaxErrorInQueryMethodRule.php @@ -91,13 +91,13 @@ public function processNode(Node $node, Scope $scope): array $queryError = $queryReflection->validateQueryString($queryString); if (null !== $queryError) { return [ - RuleErrorBuilder::message($queryError->asRuleMessage())->line($node->getStartLine())->build(), + RuleErrorBuilder::message($queryError->asRuleMessage())->identifier('dba.syntaxError')->line($node->getStartLine())->build(), ]; } } } catch (UnresolvableQueryException $exception) { return [ - RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->line($node->getStartLine())->build(), + RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->identifier('dba.unresolvableQuery')->line($node->getStartLine())->build(), ]; } From 1d675f7f14f162d9ad82eb7ed989cdf58019f324 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 7 Nov 2024 17:26:06 +0100 Subject: [PATCH 2/3] fix --- src/Rules/DoctrineKeyValueStyleRule.php | 7 ++++--- src/Rules/PdoStatementExecuteMethodRule.php | 9 +++++---- src/Rules/QueryPlanAnalyzerRule.php | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Rules/DoctrineKeyValueStyleRule.php b/src/Rules/DoctrineKeyValueStyleRule.php index 61d7636b..a79fc195 100644 --- a/src/Rules/DoctrineKeyValueStyleRule.php +++ b/src/Rules/DoctrineKeyValueStyleRule.php @@ -10,6 +10,7 @@ use PhpParser\Node\Expr\New_; use PhpParser\Node\Name\FullyQualified; use PHPStan\Analyser\Scope; +use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -65,7 +66,7 @@ public function getNodeType(): string } /** - * @return RuleError[] + * @return list */ public function processNode(Node $callLike, Scope $scope): array { @@ -114,7 +115,7 @@ public function processNode(Node $callLike, Scope $scope): array $tableNames = $tableType->getConstantStrings(); if (\count($tableNames) === 0) { return [ - RuleErrorBuilder::message('Argument #0 expects a constant string, got ' . $tableType->describe(VerbosityLevel::precise()))->line($callLike->getStartLine())->build(), + RuleErrorBuilder::message('Argument #0 expects a constant string, got ' . $tableType->describe(VerbosityLevel::precise()))->identifier('dba.keyValue')->line($callLike->getStartLine())->build(), ]; } @@ -185,7 +186,7 @@ public function processNode(Node $callLike, Scope $scope): array $ruleErrors = []; foreach ($errors as $error) { - $ruleErrors[] = RuleErrorBuilder::message('Query error: ' . $error)->line($callLike->getStartLine())->build(); + $ruleErrors[] = RuleErrorBuilder::message('Query error: ' . $error)->identifier('dba.keyValue')->line($callLike->getStartLine())->build(); } return $ruleErrors; } diff --git a/src/Rules/PdoStatementExecuteMethodRule.php b/src/Rules/PdoStatementExecuteMethodRule.php index 21a5ffd6..8e1f18fa 100644 --- a/src/Rules/PdoStatementExecuteMethodRule.php +++ b/src/Rules/PdoStatementExecuteMethodRule.php @@ -9,6 +9,7 @@ use PhpParser\Node\Expr\MethodCall; use PHPStan\Analyser\Scope; use PHPStan\Reflection\MethodReflection; +use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; @@ -55,7 +56,7 @@ public function processNode(Node $methodCall, Scope $scope): array } /** - * @return RuleError[] + * @return list */ private function checkErrors(MethodReflection $methodReflection, MethodCall $methodCall, Scope $scope): array { @@ -97,7 +98,7 @@ private function checkErrors(MethodReflection $methodReflection, MethodCall $met $parameters = $queryReflection->resolveParameters($parameterTypes) ?? []; } catch (UnresolvableQueryException $exception) { return [ - RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->line($methodCall->getStartLine())->build(), + RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->identifier('dba.unresolvableQuery')->line($methodCall->getStartLine())->build(), ]; } @@ -110,13 +111,13 @@ private function checkErrors(MethodReflection $methodReflection, MethodCall $met } } catch (UnresolvableQueryException $exception) { return [ - RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->line($methodCall->getStartLine())->build(), + RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->identifier('dba.unresolvableQuery')->line($methodCall->getStartLine())->build(), ]; } $ruleErrors = []; foreach ($errors as $error) { - $ruleErrors[] = RuleErrorBuilder::message($error)->line($methodCall->getStartLine())->build(); + $ruleErrors[] = RuleErrorBuilder::message($error)->identifier('dba.invalidPlaceholder')->line($methodCall->getStartLine())->build(); } return $ruleErrors; diff --git a/src/Rules/QueryPlanAnalyzerRule.php b/src/Rules/QueryPlanAnalyzerRule.php index 25dbf0ec..3a36687a 100644 --- a/src/Rules/QueryPlanAnalyzerRule.php +++ b/src/Rules/QueryPlanAnalyzerRule.php @@ -93,7 +93,7 @@ public function processNode(Node $callLike, Scope $scope): array return $this->analyze($callLike, $scope); } catch (UnresolvableQueryException $exception) { return [ - RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->line($callLike->getStartLine())->build(), + RuleErrorBuilder::message($exception->asRuleMessage())->tip($exception::getTip())->identifier('dba.unresolvableQuery')->line($callLike->getStartLine())->build(), ]; } } From a0bbb689019d3174a53f82951e943501cfbc1c35 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 7 Nov 2024 17:27:21 +0100 Subject: [PATCH 3/3] cs --- src/Rules/DoctrineKeyValueStyleRule.php | 1 - src/Rules/PdoStatementExecuteMethodRule.php | 1 - src/Rules/QueryPlanAnalyzerRule.php | 1 - src/Rules/SyntaxErrorInDibiPreparedStatementMethodRule.php | 1 - src/Rules/SyntaxErrorInPreparedStatementMethodRule.php | 1 - 5 files changed, 5 deletions(-) diff --git a/src/Rules/DoctrineKeyValueStyleRule.php b/src/Rules/DoctrineKeyValueStyleRule.php index a79fc195..faca003e 100644 --- a/src/Rules/DoctrineKeyValueStyleRule.php +++ b/src/Rules/DoctrineKeyValueStyleRule.php @@ -12,7 +12,6 @@ use PHPStan\Analyser\Scope; use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; -use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; use PHPStan\ShouldNotHappenException; use PHPStan\Type\IntegerRangeType; diff --git a/src/Rules/PdoStatementExecuteMethodRule.php b/src/Rules/PdoStatementExecuteMethodRule.php index 8e1f18fa..074d05ff 100644 --- a/src/Rules/PdoStatementExecuteMethodRule.php +++ b/src/Rules/PdoStatementExecuteMethodRule.php @@ -11,7 +11,6 @@ use PHPStan\Reflection\MethodReflection; use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; -use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; use PHPStan\Type\Constant\ConstantArrayType; use PHPStan\Type\Constant\ConstantIntegerType; diff --git a/src/Rules/QueryPlanAnalyzerRule.php b/src/Rules/QueryPlanAnalyzerRule.php index 3a36687a..5c18ed08 100644 --- a/src/Rules/QueryPlanAnalyzerRule.php +++ b/src/Rules/QueryPlanAnalyzerRule.php @@ -12,7 +12,6 @@ use PHPStan\Analyser\Scope; use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; -use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; use PHPStan\ShouldNotHappenException; use PHPStan\Type\ObjectType; diff --git a/src/Rules/SyntaxErrorInDibiPreparedStatementMethodRule.php b/src/Rules/SyntaxErrorInDibiPreparedStatementMethodRule.php index a80bf232..1f22dea4 100644 --- a/src/Rules/SyntaxErrorInDibiPreparedStatementMethodRule.php +++ b/src/Rules/SyntaxErrorInDibiPreparedStatementMethodRule.php @@ -13,7 +13,6 @@ use PHPStan\Reflection\MethodReflection; use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; -use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; use PHPStan\ShouldNotHappenException; use PHPStan\Type\Constant\ConstantArrayType; diff --git a/src/Rules/SyntaxErrorInPreparedStatementMethodRule.php b/src/Rules/SyntaxErrorInPreparedStatementMethodRule.php index adb90385..be789b24 100644 --- a/src/Rules/SyntaxErrorInPreparedStatementMethodRule.php +++ b/src/Rules/SyntaxErrorInPreparedStatementMethodRule.php @@ -12,7 +12,6 @@ use PHPStan\Analyser\Scope; use PHPStan\Rules\IdentifierRuleError; use PHPStan\Rules\Rule; -use PHPStan\Rules\RuleError; use PHPStan\Rules\RuleErrorBuilder; use PHPStan\ShouldNotHappenException; use PHPStan\Type\ObjectType;