@@ -4,12 +4,11 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
44
55## Project Overview
66
7- This is a PHP_CodeSniffer (PHPCS) standard package (` drevops/phpcs-standard ` ) that enforces custom coding conventions, specifically focused on configurable naming (snakeCase or camelCase) for local variables and parameters.
7+ This is a PHP_CodeSniffer (PHPCS) standard package (` drevops/phpcs-standard ` ) that enforces custom coding conventions, specifically focused on snake_case naming for local variables and parameters.
88
99** Key Goals:**
10- - Enforce consistent naming conventions for local variables and function/method parameters
11- - Support configurable formats: snakeCase (default) or camelCase
12- - Exclude class properties from naming enforcement (properties follow different conventions)
10+ - Enforce snake_case for local variables and function/method parameters
11+ - Exclude class properties from snake_case enforcement (properties follow different conventions)
1312- Preserve inherited parameter names from interfaces and parent classes
1413- Provide auto-fixing support via ` phpcbf `
1514- Provide a standalone, reusable PHPCS standard for the DrevOps ecosystem
@@ -50,8 +49,8 @@ Coverage reports are generated in:
5049Run a single test file:
5150``` bash
5251./vendor/bin/phpunit tests/Unit/AbstractVariableSnakeCaseSniffTest.php
53- ./vendor/bin/phpunit tests/Unit/LocalVariableNamingSniffTest .php
54- ./vendor/bin/phpunit tests/Unit/ParameterNamingSniffTest .php
52+ ./vendor/bin/phpunit tests/Unit/LocalVariableSnakeCaseSniffTest .php
53+ ./vendor/bin/phpunit tests/Unit/ParameterSnakeCaseSniffTest .php
5554```
5655
5756Run only unit tests or functional tests:
@@ -87,15 +86,15 @@ composer normalize --dry-run
8786### Directory Structure
8887- ` src/DrevOps/ ` - Source code for the PHPCS standard
8988 - ` Sniffs/NamingConventions/ `
90- - ` AbstractVariableNamingSniff .php` - Base class with shared functionality
91- - ` LocalVariableNamingSniff .php` - Enforces snake_case for local variables
92- - ` ParameterNamingSniff .php` - Enforces snake_case for parameters
89+ - ` AbstractSnakeCaseSniff .php` - Base class with shared functionality
90+ - ` LocalVariableSnakeCaseSniff .php` - Enforces snake_case for local variables
91+ - ` ParameterSnakeCaseSniff .php` - Enforces snake_case for parameters
9392 - ` ruleset.xml ` - DrevOps standard definition
9493- ` tests/ ` - PHPUnit tests organized by type:
9594 - ` Unit/ ` - Unit tests for individual sniff methods (using reflection)
9695 - ` AbstractVariableSnakeCaseSniffTest.php ` - Tests shared base class methods
97- - ` LocalVariableNamingSniffTest .php` - Tests local variable sniff
98- - ` ParameterNamingSniffTest .php` - Tests parameter sniff
96+ - ` LocalVariableSnakeCaseSniffTest .php` - Tests local variable sniff
97+ - ` ParameterSnakeCaseSniffTest .php` - Tests parameter sniff
9998 - ` UnitTestCase.php ` - Base test class with helper methods
10099 - ` Functional/ ` - Integration tests that run actual phpcs commands
101100 - ` Fixtures/ ` - Test fixture files with intentional violations
@@ -106,22 +105,15 @@ composer normalize --dry-run
106105
107106The standard uses an ** abstract base class pattern** with two concrete implementations:
108107
109- #### AbstractVariableNamingSniff
108+ #### AbstractSnakeCaseSniff
110109
111- Base class (src/DrevOps/Sniffs/NamingConventions/AbstractVariableNamingSniff.php) containing shared functionality:
112-
113- ** Public property:**
114- - ` $format ` - Configurable naming convention ('snakeCase' or 'camelCase', default: 'snakeCase')
110+ Base class (src/DrevOps/Sniffs/NamingConventions/AbstractSnakeCaseSniff.php) containing shared functionality:
115111
116112** Core methods:**
117113- ` register() ` - Registers T_VARIABLE token for processing
118114- ` isReserved() ` - Identifies PHP reserved variables ($this, $_ GET, etc.)
119115- ` isSnakeCase() ` - Validates snake_case format using regex
120- - ` isCamelCase() ` - Validates camelCase format using regex
121- - ` isValidFormat() ` - Validates variable name against configured format
122- - ` toSnakeCase() ` - Converts variable name to snake_case
123- - ` toCamelCase() ` - Converts variable name to camelCase
124- - ` toFormat() ` - Converts variable name to the configured format
116+ - ` toSnakeCase() ` - Converts camelCase to snake_case for suggestions
125117
126118** Helper methods:**
127119- ` getParameterNames() ` - Extracts parameter names from function signature
@@ -132,33 +124,29 @@ Base class (src/DrevOps/Sniffs/NamingConventions/AbstractVariableNamingSniff.php
132124- ` isProperty() ` - Distinguishes class properties from local variables
133125- ` isInheritedParameter() ` - Detects parameters from interfaces/parent classes
134126
135- #### LocalVariableNamingSniff
127+ #### LocalVariableSnakeCaseSniff
136128
137- Enforces configurable naming convention for ** local variables** inside functions/methods.
129+ Enforces snake_case for ** local variables** inside functions/methods.
138130
139131** What gets checked:**
140132- ✅ Local variables inside function/method bodies
141- - ❌ Function/method parameters (handled by ParameterNaming )
133+ - ❌ Function/method parameters (handled by ParameterSnakeCase )
142134- ❌ Class properties (not enforced)
143135- ❌ Reserved PHP variables ($this, superglobals, etc.)
144136
145- ** Error codes:**
146- - ` DrevOps.NamingConventions.LocalVariableNaming.NotSnakeCase ` (when format='snakeCase')
147- - ` DrevOps.NamingConventions.LocalVariableNaming.NotCamelCase ` (when format='camelCase')
137+ ** Error code:** ` DrevOps.NamingConventions.LocalVariableSnakeCase.NotSnakeCase `
148138
149- #### ParameterNamingSniff
139+ #### ParameterSnakeCaseSniff
150140
151- Enforces configurable naming convention for ** function/method parameters** .
141+ Enforces snake_case for ** function/method parameters** .
152142
153143** What gets checked:**
154144- ✅ Function and method parameters (in signature only)
155- - ❌ Local variables (handled by LocalVariableNaming )
145+ - ❌ Local variables (handled by LocalVariableSnakeCase )
156146- ❌ Parameters inherited from interfaces/parent classes/abstract methods
157147- ❌ Promoted constructor properties
158148
159- ** Error codes:**
160- - ` DrevOps.NamingConventions.ParameterNaming.NotSnakeCase ` (when format='snakeCase')
161- - ` DrevOps.NamingConventions.ParameterNaming.NotCamelCase ` (when format='camelCase')
149+ ** Error code:** ` DrevOps.NamingConventions.ParameterSnakeCase.NotSnakeCase `
162150
163151### PHPCS Standard Registration
164152
@@ -181,16 +169,16 @@ Tests are organized by class hierarchy:
181169** AbstractVariableSnakeCaseSniffTest.php**
182170- Tests all shared base class methods using reflection
183171- Tests: ` isSnakeCase() ` , ` toSnakeCase() ` , ` isReserved() ` , ` register() ` , ` getParameterNames() ` , ` isProperty() ` , ` isPromotedProperty() ` , ` isInheritedParameter() `
184- - Each test uses concrete sniff instances (LocalVariableNamingSniff or ParameterNamingSniff ) to access protected methods
172+ - Each test uses concrete sniff instances (LocalVariableSnakeCaseSniff or ParameterSnakeCaseSniff ) to access protected methods
185173
186- ** LocalVariableNamingSniffTest .php**
174+ ** LocalVariableSnakeCaseSniffTest .php**
187175- Tests sniff-specific logic: error code constant and ` process() ` method
188- - Configured to run only LocalVariableNaming sniff in isolation
176+ - Configured to run only LocalVariableSnakeCase sniff in isolation
189177- Validates that local variables are checked and parameters are skipped
190178
191- ** ParameterNamingSniffTest .php**
179+ ** ParameterSnakeCaseSniffTest .php**
192180- Tests sniff-specific logic: error code constant, ` register() ` , and ` process() ` method
193- - Configured to run only ParameterNaming sniff in isolation
181+ - Configured to run only ParameterSnakeCase sniff in isolation
194182- Validates that parameters are checked and local variables are skipped
195183- Includes tests for inherited parameter detection
196184
@@ -202,15 +190,15 @@ Tests are organized by class hierarchy:
202190
203191#### 2. Functional Tests
204192
205- ** LocalVariableNamingSniffFunctionalTest .php**
193+ ** LocalVariableSnakeCaseSniffFunctionalTest .php**
206194- Run actual ` phpcs ` commands as external processes
207195- Test complete PHPCS integration with JSON output parsing
208- - Verify LocalVariableNaming sniff detection and error codes
196+ - Verify LocalVariableSnakeCase sniff detection and error codes
209197
210- ** ParameterNamingSniffFunctionalTest .php**
198+ ** ParameterSnakeCaseSniffFunctionalTest .php**
211199- Run actual ` phpcs ` commands as external processes
212200- Test complete PHPCS integration with JSON output parsing
213- - Verify ParameterNaming sniff detection and error codes
201+ - Verify ParameterSnakeCase sniff detection and error codes
214202
215203Tests include:
216204- Confirms violations are detected with correct error codes
@@ -251,7 +239,7 @@ When implementing or modifying sniffs:
251239
2522401 . Place sniff classes in ` src/DrevOps/Sniffs/ ` following PHPCS naming conventions
253241 - Format: ` CategoryName/SniffNameSniff.php `
254- - Example: ` NamingConventions/LocalVariableNamingSniff .php `
242+ - Example: ` NamingConventions/LocalVariableSnakeCaseSniff .php `
2552432 . Consider using abstract base classes for shared functionality across related sniffs
2562443 . Implement the ` Sniff ` interface from ` PHP_CodeSniffer\Sniffs\Sniff `
2572454 . Use ` declare(strict_types=1); ` at the top of all PHP files
@@ -266,10 +254,8 @@ When implementing or modifying sniffs:
26625410 . Create fixture files in ` tests/Fixtures/ ` with intentional violations
26725511 . Follow error code naming: ` StandardName.Category.SniffName.ErrorName `
268256 - Examples:
269- - ` DrevOps.NamingConventions.LocalVariableNaming.NotSnakeCase `
270- - ` DrevOps.NamingConventions.LocalVariableNaming.NotCamelCase `
271- - ` DrevOps.NamingConventions.ParameterNaming.NotSnakeCase `
272- - ` DrevOps.NamingConventions.ParameterNaming.NotCamelCase `
257+ - ` DrevOps.NamingConventions.LocalVariableSnakeCase.NotSnakeCase `
258+ - ` DrevOps.NamingConventions.ParameterSnakeCase.NotSnakeCase `
273259
274260## CI/CD
275261
0 commit comments