Fix MODEL-ENUMS-01 to properly detect top-level keys and ignore comments
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -103,6 +103,11 @@ class ModelEnums_CodeQualityRule extends CodeQualityRule_Abstract
|
|||||||
// Check structure of $enums array
|
// Check structure of $enums array
|
||||||
$enums_content = $match[1];
|
$enums_content = $match[1];
|
||||||
|
|
||||||
|
// Strip inline comments from $enums_content to avoid false matches
|
||||||
|
// Removes // comments and /* */ comments
|
||||||
|
$enums_content = preg_replace('#//[^\n]*#', '', $enums_content);
|
||||||
|
$enums_content = preg_replace('#/\*.*?\*/#s', '', $enums_content);
|
||||||
|
|
||||||
// If not empty array, validate structure
|
// If not empty array, validate structure
|
||||||
if (trim($enums_content) !== '[]') {
|
if (trim($enums_content) !== '[]') {
|
||||||
// Parse the enums array more carefully
|
// Parse the enums array more carefully
|
||||||
@@ -121,15 +126,6 @@ class ModelEnums_CodeQualityRule extends CodeQualityRule_Abstract
|
|||||||
while ($i < $len) {
|
while ($i < $len) {
|
||||||
$char = $enums_content[$i];
|
$char = $enums_content[$i];
|
||||||
|
|
||||||
// Track string boundaries
|
|
||||||
if (!$in_string && ($char === "'" || $char === '"')) {
|
|
||||||
$in_string = true;
|
|
||||||
$string_char = $char;
|
|
||||||
} elseif ($in_string && $char === $string_char && ($i === 0 || $enums_content[$i - 1] !== '\\')) {
|
|
||||||
$in_string = false;
|
|
||||||
$string_char = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Track bracket depth when not in string
|
// Track bracket depth when not in string
|
||||||
if (!$in_string) {
|
if (!$in_string) {
|
||||||
if ($char === '[') {
|
if ($char === '[') {
|
||||||
@@ -141,29 +137,35 @@ class ModelEnums_CodeQualityRule extends CodeQualityRule_Abstract
|
|||||||
|
|
||||||
// Look for field definitions at depth 1 (inside the outer $enums = [...] bracket)
|
// Look for field definitions at depth 1 (inside the outer $enums = [...] bracket)
|
||||||
// Pattern: 'field_name' => [
|
// Pattern: 'field_name' => [
|
||||||
if ($bracket_depth === 1 && !$in_string) {
|
// Check BEFORE updating in_string so we can detect the opening quote of keys
|
||||||
// Check if we're at the start of a string key
|
if ($bracket_depth === 1 && !$in_string && ($char === "'" || $char === '"')) {
|
||||||
if ($char === "'" || $char === '"') {
|
$quote = $char;
|
||||||
$quote = $char;
|
$key_start = $i + 1;
|
||||||
$key_start = $i + 1;
|
$j = $key_start;
|
||||||
$j = $key_start;
|
// Find the closing quote
|
||||||
// Find the closing quote
|
while ($j < $len && $enums_content[$j] !== $quote) {
|
||||||
while ($j < $len && $enums_content[$j] !== $quote) {
|
$j++;
|
||||||
$j++;
|
|
||||||
}
|
|
||||||
if ($j < $len) {
|
|
||||||
$key = substr($enums_content, $key_start, $j - $key_start);
|
|
||||||
// Check if followed by => [
|
|
||||||
$after_key = ltrim(substr($enums_content, $j + 1, 20));
|
|
||||||
if (str_starts_with($after_key, '=>')) {
|
|
||||||
$after_arrow = ltrim(substr($after_key, 2));
|
|
||||||
if (str_starts_with($after_arrow, '[')) {
|
|
||||||
$top_level_fields[] = $key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$i = $j; // Skip past the key
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if ($j < $len) {
|
||||||
|
$key = substr($enums_content, $key_start, $j - $key_start);
|
||||||
|
// Check if followed by => [
|
||||||
|
$after_key = ltrim(substr($enums_content, $j + 1, 20));
|
||||||
|
if (str_starts_with($after_key, '=>')) {
|
||||||
|
$after_arrow = ltrim(substr($after_key, 2));
|
||||||
|
if (str_starts_with($after_arrow, '[')) {
|
||||||
|
$top_level_fields[] = $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$i = $j; // Skip past the key (closing quote)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Track string boundaries for non-key strings (values, nested content)
|
||||||
|
elseif (!$in_string && ($char === "'" || $char === '"')) {
|
||||||
|
$in_string = true;
|
||||||
|
$string_char = $char;
|
||||||
|
} elseif ($in_string && $char === $string_char && ($i === 0 || $enums_content[$i - 1] !== '\\')) {
|
||||||
|
$in_string = false;
|
||||||
|
$string_char = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$i++;
|
$i++;
|
||||||
|
|||||||
Reference in New Issue
Block a user