Skip to content

Commit 4407327

Browse files
committed
Rename error codes and use proper messages. Also allow specifying patterns for member and string variables
1 parent e40b059 commit 4407327

File tree

2 files changed

+68
-63
lines changed

2 files changed

+68
-63
lines changed

src/Cdn77/Sniffs/NamingConventions/ValidVariableNameSniff.php

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,14 @@
2222

2323
class ValidVariableNameSniff extends AbstractVariableSniff
2424
{
25-
public string $pattern = '\b(([a-zA-Z][a-zA-Z0-9]*?([A-Z][a-zA-Z0-9]*?)*?)|_+)\b';
25+
public const CODE_DOES_NOT_MATCH_PATTERN = 'DoesNotMatchPattern';
26+
public const CODE_MEMBER_DOES_NOT_MATCH_PATTERN = 'MemberDoesNotMatchPattern';
27+
public const CODE_STRING_DOES_NOT_MATCH_PATTERN = 'StringDoesNotMatchPattern';
28+
private const PATTERN_CAMEL_CASE_OR_UNUSED = '\b(([a-zA-Z][a-zA-Z0-9]*?([A-Z][a-zA-Z0-9]*?)*?)|_+)\b';
29+
30+
public string $pattern = self::PATTERN_CAMEL_CASE_OR_UNUSED;
31+
public string $memberPattern = self::PATTERN_CAMEL_CASE_OR_UNUSED;
32+
public string $stringPattern = self::PATTERN_CAMEL_CASE_OR_UNUSED;
2633

2734
/**
2835
* Processes this test, when one of its tokens is encountered.
@@ -59,33 +66,33 @@ protected function processVariable(File $phpcsFile, $stackPtr): void
5966
if ($tokens[$bracket]['code'] !== T_OPEN_PARENTHESIS) {
6067
$objVarName = $tokens[$var]['content'];
6168

62-
if (! $this->matchesRegex($objVarName)) {
63-
$error = 'Member variable "%s" is not in valid camel caps format';
69+
if (! $this->matchesRegex($objVarName, $this->memberPattern)) {
70+
$error = sprintf('Member variable "%%s" does not match pattern "%s"', $this->memberPattern);
6471
$data = [$objVarName];
65-
$phpcsFile->addError($error, $var, 'MemberNotCamelCaps', $data);
72+
$phpcsFile->addError($error, $var, self::CODE_MEMBER_DOES_NOT_MATCH_PATTERN, $data);
6673
}
6774
}
6875
}
6976
}
7077

7178
$objOperator = $phpcsFile->findPrevious(T_WHITESPACE, $stackPtr - 1, null, true);
7279
if ($tokens[$objOperator]['code'] === T_DOUBLE_COLON) {
73-
if (! $this->matchesRegex($varName)) {
74-
$error = 'Member variable "%s" is not in valid camel caps format';
80+
if (! $this->matchesRegex($varName, $this->memberPattern)) {
81+
$error = sprintf('Member variable "%%s" does not match pattern "%s"', $this->memberPattern);
7582
$data = [$tokens[$stackPtr]['content']];
76-
$phpcsFile->addError($error, $stackPtr, 'MemberNotCamelCaps', $data);
83+
$phpcsFile->addError($error, $stackPtr, self::CODE_MEMBER_DOES_NOT_MATCH_PATTERN, $data);
7784
}
7885

7986
return;
8087
}
8188

82-
if ($this->matchesRegex($varName)) {
89+
if ($this->matchesRegex($varName, $this->pattern)) {
8390
return;
8491
}
8592

86-
$error = 'Variable "%s" is not in valid camel caps format';
93+
$error = sprintf('Variable "%%s" does not match pattern "%s"', $this->pattern);
8794
$data = [$varName];
88-
$phpcsFile->addError($error, $stackPtr, 'NotCamelCaps', $data);
95+
$phpcsFile->addError($error, $stackPtr, self::CODE_DOES_NOT_MATCH_PATTERN, $data);
8996
}
9097

9198
/**
@@ -113,12 +120,12 @@ protected function processMemberVar(File $phpcsFile, $stackPtr): void
113120

114121
$errorData = [$varName];
115122

116-
if ($this->matchesRegex($varName)) {
123+
if ($this->matchesRegex($varName, $this->memberPattern)) {
117124
return;
118125
}
119126

120-
$error = 'Member variable "%s" is not in valid camel caps format';
121-
$phpcsFile->addError($error, $stackPtr, 'MemberNotCamelCaps', $errorData);
127+
$error = sprintf('Member variable "%%s" does not match pattern "%s"', $this->memberPattern);
128+
$phpcsFile->addError($error, $stackPtr, self::CODE_MEMBER_DOES_NOT_MATCH_PATTERN, $errorData);
122129
}
123130

124131
/**
@@ -150,18 +157,18 @@ protected function processVariableInString(File $phpcsFile, $stackPtr): void
150157
continue;
151158
}
152159

153-
if ($this->matchesRegex($varName)) {
160+
if ($this->matchesRegex($varName, $this->stringPattern)) {
154161
continue;
155162
}
156163

157-
$error = 'Variable "%s" is not in valid camel caps format';
164+
$error = sprintf('Variable "%%s" does not match pattern "%s"', $this->stringPattern);
158165
$data = [$varName];
159-
$phpcsFile->addError($error, $stackPtr, 'StringNotCamelCaps', $data);
166+
$phpcsFile->addError($error, $stackPtr, self::CODE_STRING_DOES_NOT_MATCH_PATTERN, $data);
160167
}
161168
}
162169

163-
private function matchesRegex(string $varName): bool
170+
private function matchesRegex(string $varName, string $pattern): bool
164171
{
165-
return preg_match(sprintf('~%s~', $this->pattern), $varName) === 1;
172+
return preg_match(sprintf('~%s~', $pattern), $varName) === 1;
166173
}
167174
}

tests/Sniffs/NamingConventions/ValidVariableNameSniffTest.php

Lines changed: 43 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,56 +14,54 @@
1414

1515
class ValidVariableNameSniffTest extends TestCase
1616
{
17-
public const CODE_NOT_CAMEL_CAPS = 'NotCamelCaps';
18-
public const CODE_MEMBER_NOT_CAMEL_CAPS = 'MemberNotCamelCaps';
19-
public const CODE_PUBLIC_HAS_UNDERSCORE = 'PublicHasUnderscore';
20-
public const CODE_STRING_NOT_CAMEL_CAPS = 'StringNotCamelCaps';
21-
2217
public function testErrors(): void
2318
{
2419
$file = self::checkFile(__DIR__ . '/data/ValidVariableNameSniffTest.inc');
2520

2621
$errorTypesPerLine = [
27-
3 => self::CODE_NOT_CAMEL_CAPS,
28-
5 => self::CODE_NOT_CAMEL_CAPS,
29-
10 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
30-
12 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
31-
15 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
32-
17 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
33-
20 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
34-
22 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
35-
24 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
36-
25 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
37-
26 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
38-
31 => self::CODE_NOT_CAMEL_CAPS,
39-
33 => self::CODE_NOT_CAMEL_CAPS,
40-
36 => self::CODE_STRING_NOT_CAMEL_CAPS,
41-
37 => self::CODE_STRING_NOT_CAMEL_CAPS,
42-
39 => self::CODE_STRING_NOT_CAMEL_CAPS,
43-
42 => self::CODE_NOT_CAMEL_CAPS,
44-
44 => self::CODE_NOT_CAMEL_CAPS,
45-
53 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
46-
55 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
47-
58 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
48-
60 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
49-
62 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
50-
63 => self::CODE_NOT_CAMEL_CAPS,
51-
64 => self::CODE_NOT_CAMEL_CAPS,
52-
67 => self::CODE_NOT_CAMEL_CAPS,
53-
81 => self::CODE_STRING_NOT_CAMEL_CAPS,
54-
106 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
55-
107 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
56-
108 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
57-
123 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
58-
124 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
59-
134 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
60-
138 => self::CODE_NOT_CAMEL_CAPS,
61-
140 => self::CODE_NOT_CAMEL_CAPS,
62-
141 => self::CODE_NOT_CAMEL_CAPS,
63-
146 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
64-
148 => self::CODE_MEMBER_NOT_CAMEL_CAPS,
65-
150 => [self::CODE_NOT_CAMEL_CAPS, self::CODE_NOT_CAMEL_CAPS],
66-
152 => self::CODE_NOT_CAMEL_CAPS,
22+
3 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
23+
5 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
24+
10 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
25+
12 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
26+
15 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
27+
17 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
28+
20 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
29+
22 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
30+
24 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
31+
25 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
32+
26 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
33+
31 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
34+
33 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
35+
36 => ValidVariableNameSniff::CODE_STRING_DOES_NOT_MATCH_PATTERN,
36+
37 => ValidVariableNameSniff::CODE_STRING_DOES_NOT_MATCH_PATTERN,
37+
39 => ValidVariableNameSniff::CODE_STRING_DOES_NOT_MATCH_PATTERN,
38+
42 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
39+
44 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
40+
53 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
41+
55 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
42+
58 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
43+
60 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
44+
62 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
45+
63 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
46+
64 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
47+
67 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
48+
81 => ValidVariableNameSniff::CODE_STRING_DOES_NOT_MATCH_PATTERN,
49+
106 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
50+
107 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
51+
108 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
52+
123 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
53+
124 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
54+
134 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
55+
138 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
56+
140 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
57+
141 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
58+
146 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
59+
148 => ValidVariableNameSniff::CODE_MEMBER_DOES_NOT_MATCH_PATTERN,
60+
150 => [
61+
ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
62+
ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
63+
],
64+
152 => ValidVariableNameSniff::CODE_DOES_NOT_MATCH_PATTERN,
6765
];
6866
$possibleLines = array_keys($errorTypesPerLine);
6967

0 commit comments

Comments
 (0)