eslint-plugin-templ 0.0.1
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/LICENSE +7 -0
- package/README.md +53 -0
- package/dist/html-source-code.d.ts +116 -0
- package/dist/html-source-code.d.ts.map +1 -0
- package/dist/html-source-code.js +270 -0
- package/dist/html-source-code.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/parse-for-eslint.d.ts +4 -0
- package/dist/parse-for-eslint.d.ts.map +1 -0
- package/dist/parse-for-eslint.js +70 -0
- package/dist/parse-for-eslint.js.map +1 -0
- package/dist/run-templ-ast-to-json-binary.d.ts +2 -0
- package/dist/run-templ-ast-to-json-binary.d.ts.map +1 -0
- package/dist/run-templ-ast-to-json-binary.js +33 -0
- package/dist/run-templ-ast-to-json-binary.js.map +1 -0
- package/dist/templ-ast-to-eslint-ast.d.ts +7 -0
- package/dist/templ-ast-to-eslint-ast.d.ts.map +1 -0
- package/dist/templ-ast-to-eslint-ast.js +218 -0
- package/dist/templ-ast-to-eslint-ast.js.map +1 -0
- package/dist/templ-ast.d.ts +804 -0
- package/dist/templ-ast.d.ts.map +1 -0
- package/dist/templ-ast.js +207 -0
- package/dist/templ-ast.js.map +1 -0
- package/dist/templ-language.d.ts +24 -0
- package/dist/templ-language.d.ts.map +1 -0
- package/dist/templ-language.js +33 -0
- package/dist/templ-language.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversion utilities for transforming templ AST to ESLint-compatible HTML AST
|
|
3
|
+
*/
|
|
4
|
+
import { NodeTypes } from "es-html-parser";
|
|
5
|
+
export function convertToESLintAST(templAST) {
|
|
6
|
+
const children = [];
|
|
7
|
+
for (const node of templAST) {
|
|
8
|
+
// Only process HTMLTemplate nodes which have Children
|
|
9
|
+
// Skip FileGoExpression, CSSTemplate, and ScriptTemplate as they don't contain HTML
|
|
10
|
+
if ("Children" in node && Array.isArray(node.Children)) {
|
|
11
|
+
for (const child of node.Children) {
|
|
12
|
+
const converted = convertChild(child);
|
|
13
|
+
if (converted) {
|
|
14
|
+
children.push(converted);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Calculate overall document range
|
|
20
|
+
const firstChild = children[0];
|
|
21
|
+
const lastChild = children[children.length - 1];
|
|
22
|
+
const range = firstChild && lastChild
|
|
23
|
+
? [firstChild.range[0], lastChild.range[1]]
|
|
24
|
+
: [0, 0];
|
|
25
|
+
const loc = firstChild && lastChild
|
|
26
|
+
? { start: firstChild.loc.start, end: lastChild.loc.end }
|
|
27
|
+
: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } };
|
|
28
|
+
return {
|
|
29
|
+
type: NodeTypes.Document,
|
|
30
|
+
children,
|
|
31
|
+
range,
|
|
32
|
+
loc,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function convertChild(child) {
|
|
36
|
+
if (isElementNode(child)) {
|
|
37
|
+
return convertElement(child);
|
|
38
|
+
}
|
|
39
|
+
if (isWhitespace(child)) {
|
|
40
|
+
// For whitespace, we need to create synthetic position info
|
|
41
|
+
// Since we don't have position info, we'll create minimal text nodes
|
|
42
|
+
return {
|
|
43
|
+
type: NodeTypes.Text,
|
|
44
|
+
value: child.Value,
|
|
45
|
+
range: [0, child.Value.length],
|
|
46
|
+
loc: {
|
|
47
|
+
start: { line: 1, column: 0 },
|
|
48
|
+
end: { line: 1, column: child.Value.length },
|
|
49
|
+
},
|
|
50
|
+
parts: [],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (isStringExpression(child)) {
|
|
54
|
+
return {
|
|
55
|
+
type: NodeTypes.Text,
|
|
56
|
+
value: child.Value,
|
|
57
|
+
range: convertRange(child.Range),
|
|
58
|
+
loc: convertLoc(child.Range),
|
|
59
|
+
parts: [],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// For now, ignore Go expressions and call expressions
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
function convertElement(node) {
|
|
66
|
+
const range = convertRange(node.Range);
|
|
67
|
+
const loc = convertLoc(node.Range);
|
|
68
|
+
const openStartRange = convertRange({
|
|
69
|
+
From: node.Range.From,
|
|
70
|
+
To: node.NameRange.To,
|
|
71
|
+
});
|
|
72
|
+
const openStart = {
|
|
73
|
+
type: NodeTypes.OpenTagStart,
|
|
74
|
+
value: `<${node.Name}`,
|
|
75
|
+
range: openStartRange,
|
|
76
|
+
loc: convertLoc({
|
|
77
|
+
From: node.Range.From,
|
|
78
|
+
To: node.NameRange.To,
|
|
79
|
+
}),
|
|
80
|
+
};
|
|
81
|
+
// Estimate the position of the closing > of the opening tag
|
|
82
|
+
const lastAttr = node.Attributes && node.Attributes.length > 0
|
|
83
|
+
? node.Attributes[node.Attributes.length - 1]
|
|
84
|
+
: null;
|
|
85
|
+
const openEndStart = lastAttr
|
|
86
|
+
? lastAttr.Key.NameRange.To.Index +
|
|
87
|
+
2 +
|
|
88
|
+
(lastAttr.Value?.length ?? lastAttr.Expression?.Value.length ?? 0) +
|
|
89
|
+
1
|
|
90
|
+
: node.NameRange.To.Index;
|
|
91
|
+
const openEnd = {
|
|
92
|
+
type: NodeTypes.OpenTagEnd,
|
|
93
|
+
value: ">",
|
|
94
|
+
range: [openEndStart, openEndStart + 1],
|
|
95
|
+
loc: {
|
|
96
|
+
start: {
|
|
97
|
+
line: node.NameRange.To.Line + 1,
|
|
98
|
+
column: node.NameRange.To.Col,
|
|
99
|
+
},
|
|
100
|
+
end: {
|
|
101
|
+
line: node.NameRange.To.Line + 1,
|
|
102
|
+
column: node.NameRange.To.Col + 1,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
// Estimate close tag position (at the end of the element range)
|
|
107
|
+
const closeTagStart = node.Range.To.Index - (node.Name.length + 3); // -3 for </>
|
|
108
|
+
const close = {
|
|
109
|
+
type: NodeTypes.CloseTag,
|
|
110
|
+
value: `</${node.Name}>`,
|
|
111
|
+
range: [closeTagStart, node.Range.To.Index],
|
|
112
|
+
loc: {
|
|
113
|
+
start: {
|
|
114
|
+
line: node.Range.To.Line + 1,
|
|
115
|
+
column: Math.max(0, node.Range.To.Col - (node.Name.length + 3)),
|
|
116
|
+
},
|
|
117
|
+
end: convertPosition(node.Range.To),
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
const attributes = node.Attributes
|
|
121
|
+
? node.Attributes.map(convertAttribute)
|
|
122
|
+
: [];
|
|
123
|
+
const children = node.Children.map(convertChild).filter((child) => child !== null);
|
|
124
|
+
return {
|
|
125
|
+
type: NodeTypes.Tag,
|
|
126
|
+
name: node.Name,
|
|
127
|
+
selfClosing: false,
|
|
128
|
+
openStart,
|
|
129
|
+
openEnd,
|
|
130
|
+
close,
|
|
131
|
+
attributes,
|
|
132
|
+
children,
|
|
133
|
+
range,
|
|
134
|
+
loc,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function convertAttribute(attr) {
|
|
138
|
+
const keyRange = convertRange(attr.Key.NameRange);
|
|
139
|
+
const keyLoc = convertLoc(attr.Key.NameRange);
|
|
140
|
+
const key = {
|
|
141
|
+
type: NodeTypes.AttributeKey,
|
|
142
|
+
value: attr.Key.Name,
|
|
143
|
+
range: keyRange,
|
|
144
|
+
loc: keyLoc,
|
|
145
|
+
parts: [],
|
|
146
|
+
};
|
|
147
|
+
// Handle both constant attributes (Value) and expression attributes (Expression)
|
|
148
|
+
const attrValue = attr.Value ?? "";
|
|
149
|
+
const valueLength = attr.Expression
|
|
150
|
+
? attr.Expression.Range.To.Index - attr.Expression.Range.From.Index + 4 // +4 for { and }
|
|
151
|
+
: attrValue.length;
|
|
152
|
+
// Calculate the value range - it comes after the key, =, and quote (or just = for expressions)
|
|
153
|
+
const valueStartIndex = attr.Key.NameRange.To.Index + 2; // +2 for '="' or '={'
|
|
154
|
+
const valueEndIndex = valueStartIndex + valueLength;
|
|
155
|
+
const valueRange = [valueStartIndex, valueEndIndex];
|
|
156
|
+
const value = {
|
|
157
|
+
type: NodeTypes.AttributeValue,
|
|
158
|
+
value: attrValue,
|
|
159
|
+
range: valueRange,
|
|
160
|
+
loc: {
|
|
161
|
+
start: {
|
|
162
|
+
line: attr.Key.NameRange.To.Line + 1,
|
|
163
|
+
column: attr.Key.NameRange.To.Col + 2,
|
|
164
|
+
},
|
|
165
|
+
end: {
|
|
166
|
+
line: attr.Key.NameRange.To.Line + 1,
|
|
167
|
+
column: attr.Key.NameRange.To.Col + 2 + valueLength,
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
parts: [],
|
|
171
|
+
};
|
|
172
|
+
// Attribute node spans from key start to after value and closing quote/brace
|
|
173
|
+
const attrRange = [keyRange[0], valueEndIndex + 1]; // +1 for closing quote or }
|
|
174
|
+
return {
|
|
175
|
+
type: NodeTypes.Attribute,
|
|
176
|
+
key,
|
|
177
|
+
value,
|
|
178
|
+
range: attrRange,
|
|
179
|
+
loc: {
|
|
180
|
+
start: keyLoc.start,
|
|
181
|
+
end: {
|
|
182
|
+
line: value.loc.end.line,
|
|
183
|
+
column: value.loc.end.column + 1,
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function convertLoc(range) {
|
|
189
|
+
return {
|
|
190
|
+
start: convertPosition(range.From),
|
|
191
|
+
end: convertPosition(range.To),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
function convertRange(range) {
|
|
195
|
+
return [range.From.Index, range.To.Index];
|
|
196
|
+
}
|
|
197
|
+
function convertPosition(pos) {
|
|
198
|
+
return {
|
|
199
|
+
line: pos.Line + 1, // Convert from 0-based to 1-based
|
|
200
|
+
column: pos.Col,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
function isElementNode(node) {
|
|
204
|
+
return "Name" in node && "Range" in node && "Children" in node;
|
|
205
|
+
}
|
|
206
|
+
function isWhitespace(node) {
|
|
207
|
+
return ("Value" in node &&
|
|
208
|
+
!("Range" in node) &&
|
|
209
|
+
!("Expression" in node) &&
|
|
210
|
+
!("TrailingSpace" in node));
|
|
211
|
+
}
|
|
212
|
+
function isStringExpression(node) {
|
|
213
|
+
return ("Value" in node &&
|
|
214
|
+
"Range" in node &&
|
|
215
|
+
"TrailingSpace" in node &&
|
|
216
|
+
!("Expression" in node));
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=templ-ast-to-eslint-ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templ-ast-to-eslint-ast.js","sourceRoot":"","sources":["../src/templ-ast-to-eslint-ast.ts"],"names":[],"mappings":"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"}
|