@herb-tools/linter 0.8.8 → 0.8.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/herb-lint.js +96 -21
- package/dist/herb-lint.js.map +1 -1
- package/dist/index.cjs +8 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/loader.cjs +47 -5
- package/dist/loader.cjs.map +1 -1
- package/dist/loader.js +47 -5
- package/dist/loader.js.map +1 -1
- package/dist/package.json +7 -7
- package/dist/src/rules/erb-strict-locals-comment-syntax.js +8 -1
- package/dist/src/rules/erb-strict-locals-comment-syntax.js.map +1 -1
- package/package.json +7 -7
- package/src/rules/erb-strict-locals-comment-syntax.ts +10 -1
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@herb-tools/linter",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.10",
|
|
4
4
|
"description": "HTML+ERB linter for validating HTML structure and enforcing best practices",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://herb-tools.dev",
|
|
@@ -45,12 +45,12 @@
|
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@herb-tools/config": "0.8.
|
|
49
|
-
"@herb-tools/core": "0.8.
|
|
50
|
-
"@herb-tools/highlighter": "0.8.
|
|
51
|
-
"@herb-tools/node-wasm": "0.8.
|
|
52
|
-
"@herb-tools/printer": "0.8.
|
|
53
|
-
"@herb-tools/rewriter": "0.8.
|
|
48
|
+
"@herb-tools/config": "0.8.10",
|
|
49
|
+
"@herb-tools/core": "0.8.10",
|
|
50
|
+
"@herb-tools/highlighter": "0.8.10",
|
|
51
|
+
"@herb-tools/node-wasm": "0.8.10",
|
|
52
|
+
"@herb-tools/printer": "0.8.10",
|
|
53
|
+
"@herb-tools/rewriter": "0.8.10",
|
|
54
54
|
"picomatch": "^4.0.2",
|
|
55
55
|
"tinyglobby": "^0.2.15"
|
|
56
56
|
},
|
|
@@ -2,7 +2,7 @@ import { BaseRuleVisitor } from "./rule-utils.js";
|
|
|
2
2
|
import { ParserRule } from "../types.js";
|
|
3
3
|
import { isPartialFile } from "./file-utils.js";
|
|
4
4
|
import { hasBalancedParentheses, splitByTopLevelComma } from "./string-utils.js";
|
|
5
|
-
export const STRICT_LOCALS_PATTERN = /^locals:\s
|
|
5
|
+
export const STRICT_LOCALS_PATTERN = /^locals:\s+\(.*\)\s*$/s;
|
|
6
6
|
function isValidStrictLocalsFormat(content) {
|
|
7
7
|
return STRICT_LOCALS_PATTERN.test(content);
|
|
8
8
|
}
|
|
@@ -32,6 +32,9 @@ function detectSingularLocal(content) {
|
|
|
32
32
|
function detectMissingColonBeforeParens(content) {
|
|
33
33
|
return /^locals\s+\(/.test(content);
|
|
34
34
|
}
|
|
35
|
+
function detectMissingSpaceAfterColon(content) {
|
|
36
|
+
return /^locals:\(/.test(content);
|
|
37
|
+
}
|
|
35
38
|
function detectMissingParentheses(content) {
|
|
36
39
|
return /^locals:\s*[^(]/.test(content);
|
|
37
40
|
}
|
|
@@ -178,6 +181,10 @@ class ERBStrictLocalsCommentSyntaxVisitor extends BaseRuleVisitor {
|
|
|
178
181
|
this.addOffense("Use `locals:` with a colon before the parentheses, not `locals (`.", node.location);
|
|
179
182
|
return;
|
|
180
183
|
}
|
|
184
|
+
if (detectMissingSpaceAfterColon(commentContent)) {
|
|
185
|
+
this.addOffense("Missing space after `locals:`. Rails Strict Locals require a space after the colon: `<%# locals: (...) %>`.", node.location);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
181
188
|
if (detectMissingParentheses(commentContent)) {
|
|
182
189
|
this.addOffense("Wrap parameters in parentheses: `locals: (name:)` or `locals: (name: default)`.", node.location);
|
|
183
190
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erb-strict-locals-comment-syntax.js","sourceRoot":"","sources":["../../../src/rules/erb-strict-locals-comment-syntax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAKhF,MAAM,CAAC,MAAM,qBAAqB,GAAG,
|
|
1
|
+
{"version":3,"file":"erb-strict-locals-comment-syntax.js","sourceRoot":"","sources":["../../../src/rules/erb-strict-locals-comment-syntax.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@herb-tools/linter",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.10",
|
|
4
4
|
"description": "HTML+ERB linter for validating HTML structure and enforcing best practices",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://herb-tools.dev",
|
|
@@ -45,12 +45,12 @@
|
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@herb-tools/config": "0.8.
|
|
49
|
-
"@herb-tools/core": "0.8.
|
|
50
|
-
"@herb-tools/highlighter": "0.8.
|
|
51
|
-
"@herb-tools/node-wasm": "0.8.
|
|
52
|
-
"@herb-tools/printer": "0.8.
|
|
53
|
-
"@herb-tools/rewriter": "0.8.
|
|
48
|
+
"@herb-tools/config": "0.8.10",
|
|
49
|
+
"@herb-tools/core": "0.8.10",
|
|
50
|
+
"@herb-tools/highlighter": "0.8.10",
|
|
51
|
+
"@herb-tools/node-wasm": "0.8.10",
|
|
52
|
+
"@herb-tools/printer": "0.8.10",
|
|
53
|
+
"@herb-tools/rewriter": "0.8.10",
|
|
54
54
|
"picomatch": "^4.0.2",
|
|
55
55
|
"tinyglobby": "^0.2.15"
|
|
56
56
|
},
|
|
@@ -7,7 +7,7 @@ import { hasBalancedParentheses, splitByTopLevelComma } from "./string-utils.js"
|
|
|
7
7
|
import type { UnboundLintOffense, LintContext, FullRuleConfig } from "../types.js"
|
|
8
8
|
import type { ParseResult, ERBContentNode } from "@herb-tools/core"
|
|
9
9
|
|
|
10
|
-
export const STRICT_LOCALS_PATTERN = /^locals:\s
|
|
10
|
+
export const STRICT_LOCALS_PATTERN = /^locals:\s+\(.*\)\s*$/s
|
|
11
11
|
|
|
12
12
|
function isValidStrictLocalsFormat(content: string): boolean {
|
|
13
13
|
return STRICT_LOCALS_PATTERN.test(content)
|
|
@@ -49,6 +49,10 @@ function detectMissingColonBeforeParens(content: string): boolean {
|
|
|
49
49
|
return /^locals\s+\(/.test(content)
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
function detectMissingSpaceAfterColon(content: string): boolean {
|
|
53
|
+
return /^locals:\(/.test(content)
|
|
54
|
+
}
|
|
55
|
+
|
|
52
56
|
function detectMissingParentheses(content: string): boolean {
|
|
53
57
|
return /^locals:\s*[^(]/.test(content)
|
|
54
58
|
}
|
|
@@ -240,6 +244,11 @@ class ERBStrictLocalsCommentSyntaxVisitor extends BaseRuleVisitor {
|
|
|
240
244
|
return
|
|
241
245
|
}
|
|
242
246
|
|
|
247
|
+
if (detectMissingSpaceAfterColon(commentContent)) {
|
|
248
|
+
this.addOffense("Missing space after `locals:`. Rails Strict Locals require a space after the colon: `<%# locals: (...) %>`.", node.location)
|
|
249
|
+
return
|
|
250
|
+
}
|
|
251
|
+
|
|
243
252
|
if (detectMissingParentheses(commentContent)) {
|
|
244
253
|
this.addOffense("Wrap parameters in parentheses: `locals: (name:)` or `locals: (name: default)`.", node.location)
|
|
245
254
|
return
|