trigger_system 1.0.0
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 +21 -0
- package/README.md +127 -0
- package/dist/browser/index.browser.js +48 -0
- package/dist/browser/index.browser.js.map +122 -0
- package/dist/cli/lsp-server.d.ts +3 -0
- package/dist/cli/lsp-server.d.ts.map +1 -0
- package/dist/cli/validate.d.ts +2 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/core/action-registry.d.ts +12 -0
- package/dist/core/action-registry.d.ts.map +1 -0
- package/dist/core/context-adapter.d.ts +23 -0
- package/dist/core/context-adapter.d.ts.map +1 -0
- package/dist/core/dependency-graph.d.ts +18 -0
- package/dist/core/dependency-graph.d.ts.map +1 -0
- package/dist/core/engine.d.ts +24 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/event-queue.d.ts +25 -0
- package/dist/core/event-queue.d.ts.map +1 -0
- package/dist/core/expression-engine.d.ts +31 -0
- package/dist/core/expression-engine.d.ts.map +1 -0
- package/dist/core/index.d.ts +10 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/persistence-browser.d.ts +20 -0
- package/dist/core/persistence-browser.d.ts.map +1 -0
- package/dist/core/persistence.d.ts +34 -0
- package/dist/core/persistence.d.ts.map +1 -0
- package/dist/core/persistence.node.d.ts +18 -0
- package/dist/core/persistence.node.d.ts.map +1 -0
- package/dist/core/plugin-manager.d.ts +15 -0
- package/dist/core/plugin-manager.d.ts.map +1 -0
- package/dist/core/rule-engine.d.ts +39 -0
- package/dist/core/rule-engine.d.ts.map +1 -0
- package/dist/core/state-manager.d.ts +41 -0
- package/dist/core/state-manager.d.ts.map +1 -0
- package/dist/domain/index.d.ts +2 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/validator.d.ts +2433 -0
- package/dist/domain/validator.d.ts.map +1 -0
- package/dist/index.browser.d.ts +6 -0
- package/dist/index.browser.d.ts.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/io/index.d.ts +2 -0
- package/dist/io/index.d.ts.map +1 -0
- package/dist/io/loader.node.d.ts +14 -0
- package/dist/io/loader.node.d.ts.map +1 -0
- package/dist/lsp/completions.d.ts +6 -0
- package/dist/lsp/completions.d.ts.map +1 -0
- package/dist/lsp/completions.js +624 -0
- package/dist/lsp/completions.js.map +1 -0
- package/dist/lsp/data-context.d.ts +60 -0
- package/dist/lsp/data-context.d.ts.map +1 -0
- package/dist/lsp/data-context.js +172 -0
- package/dist/lsp/data-context.js.map +1 -0
- package/dist/lsp/diagnostics.d.ts +7 -0
- package/dist/lsp/diagnostics.d.ts.map +1 -0
- package/dist/lsp/diagnostics.js +373 -0
- package/dist/lsp/diagnostics.js.map +1 -0
- package/dist/lsp/directives.d.ts +44 -0
- package/dist/lsp/directives.d.ts.map +1 -0
- package/dist/lsp/directives.js +232 -0
- package/dist/lsp/directives.js.map +1 -0
- package/dist/lsp/domain/index.d.ts +2 -0
- package/dist/lsp/domain/index.d.ts.map +1 -0
- package/dist/lsp/domain/index.js +18 -0
- package/dist/lsp/domain/index.js.map +1 -0
- package/dist/lsp/domain/validator.d.ts +2433 -0
- package/dist/lsp/domain/validator.d.ts.map +1 -0
- package/dist/lsp/domain/validator.js +225 -0
- package/dist/lsp/domain/validator.js.map +1 -0
- package/dist/lsp/hover.d.ts +7 -0
- package/dist/lsp/hover.d.ts.map +1 -0
- package/dist/lsp/hover.js +462 -0
- package/dist/lsp/hover.js.map +1 -0
- package/dist/lsp/lsp/completions.d.ts +6 -0
- package/dist/lsp/lsp/completions.d.ts.map +1 -0
- package/dist/lsp/lsp/completions.js +624 -0
- package/dist/lsp/lsp/completions.js.map +1 -0
- package/dist/lsp/lsp/data-context.d.ts +60 -0
- package/dist/lsp/lsp/data-context.d.ts.map +1 -0
- package/dist/lsp/lsp/data-context.js +172 -0
- package/dist/lsp/lsp/data-context.js.map +1 -0
- package/dist/lsp/lsp/diagnostics.d.ts +7 -0
- package/dist/lsp/lsp/diagnostics.d.ts.map +1 -0
- package/dist/lsp/lsp/diagnostics.js +373 -0
- package/dist/lsp/lsp/diagnostics.js.map +1 -0
- package/dist/lsp/lsp/directives.d.ts +44 -0
- package/dist/lsp/lsp/directives.d.ts.map +1 -0
- package/dist/lsp/lsp/directives.js +232 -0
- package/dist/lsp/lsp/directives.js.map +1 -0
- package/dist/lsp/lsp/hover.d.ts +7 -0
- package/dist/lsp/lsp/hover.d.ts.map +1 -0
- package/dist/lsp/lsp/hover.js +462 -0
- package/dist/lsp/lsp/hover.js.map +1 -0
- package/dist/lsp/lsp/semantic_tokens.d.ts +4 -0
- package/dist/lsp/lsp/semantic_tokens.d.ts.map +1 -0
- package/dist/lsp/lsp/semantic_tokens.js +158 -0
- package/dist/lsp/lsp/semantic_tokens.js.map +1 -0
- package/dist/lsp/lsp/server.d.ts +2 -0
- package/dist/lsp/lsp/server.d.ts.map +1 -0
- package/dist/lsp/lsp/server.js +216 -0
- package/dist/lsp/lsp/server.js.map +1 -0
- package/dist/lsp/semantic_tokens.d.ts +4 -0
- package/dist/lsp/semantic_tokens.d.ts.map +1 -0
- package/dist/lsp/semantic_tokens.js +158 -0
- package/dist/lsp/semantic_tokens.js.map +1 -0
- package/dist/lsp/server.bundle.d.ts +2 -0
- package/dist/lsp/server.bundle.d.ts.map +1 -0
- package/dist/lsp/server.bundle.js +256 -0
- package/dist/lsp/server.d.ts +2 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +216 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/types.d.ts +71 -0
- package/dist/lsp/types.d.ts.map +1 -0
- package/dist/lsp/types.js +4 -0
- package/dist/lsp/types.js.map +1 -0
- package/dist/node/index.js +186 -0
- package/dist/node/index.js.map +196 -0
- package/dist/node/node.js +187 -0
- package/dist/node/node.js.map +198 -0
- package/dist/node.d.ts +4 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/sdk/builder.d.ts +39 -0
- package/dist/sdk/builder.d.ts.map +1 -0
- package/dist/sdk/exporter.d.ts +13 -0
- package/dist/sdk/exporter.d.ts.map +1 -0
- package/dist/sdk/index.d.ts +3 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/emitter.d.ts +25 -0
- package/dist/utils/emitter.d.ts.map +1 -0
- package/dist/utils/utils.d.ts +18 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDiagnosticsForText = getDiagnosticsForText;
|
|
4
|
+
const node_1 = require("vscode-languageserver/node");
|
|
5
|
+
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
|
|
6
|
+
const yaml_1 = require("yaml");
|
|
7
|
+
const validator_1 = require("../domain/validator");
|
|
8
|
+
const directives_1 = require("./directives");
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
/**
|
|
12
|
+
* Validates the text content of a document and returns diagnostics.
|
|
13
|
+
* Extracted for easier testing without the full LSP connection mock.
|
|
14
|
+
*/
|
|
15
|
+
async function getDiagnosticsForText(text) {
|
|
16
|
+
const diagnostics = [];
|
|
17
|
+
// Create a minimal TextDocument object for position calculation
|
|
18
|
+
// We use the library one if accessible, but for simple calculation this is enough.
|
|
19
|
+
const textDocument = vscode_languageserver_textdocument_1.TextDocument.create("file://test", "yaml", 1, text);
|
|
20
|
+
// Parse directives from comments
|
|
21
|
+
const directives = (0, directives_1.processRangeDirectives)((0, directives_1.parseDirectives)(textDocument));
|
|
22
|
+
// Parse YAML with CST (Concrete Syntax Tree) from 'yaml' package
|
|
23
|
+
const doc = (0, yaml_1.parseDocument)(text);
|
|
24
|
+
// 1. Syntax Errors
|
|
25
|
+
if (doc.errors.length > 0) {
|
|
26
|
+
for (const err of doc.errors) {
|
|
27
|
+
const diagnostic = {
|
|
28
|
+
severity: node_1.DiagnosticSeverity.Error,
|
|
29
|
+
range: {
|
|
30
|
+
start: textDocument.positionAt(err.pos[0]),
|
|
31
|
+
end: textDocument.positionAt(err.pos[1])
|
|
32
|
+
},
|
|
33
|
+
message: err.message,
|
|
34
|
+
source: 'yaml-parser'
|
|
35
|
+
};
|
|
36
|
+
// Check if diagnostic is suppressed
|
|
37
|
+
const line = diagnostic.range.start.line;
|
|
38
|
+
if (!(0, directives_1.isDiagnosticSuppressed)(line, directives, 'yaml-parser')) {
|
|
39
|
+
diagnostics.push(diagnostic);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// 1.5 Check for multi-document YAML and suggest list format
|
|
44
|
+
// Multi-document separator is '---' (on its own line after the first document)
|
|
45
|
+
const lines = text.split('\n');
|
|
46
|
+
let foundFirstDocument = false;
|
|
47
|
+
for (let i = 0; i < lines.length; i++) {
|
|
48
|
+
const line = lines[i]?.trim() || '';
|
|
49
|
+
// Skip initial '---' (YAML document start marker)
|
|
50
|
+
if (i === 0 && line === '---') {
|
|
51
|
+
foundFirstDocument = true;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
// If we find '---' after content, it's a multi-document file
|
|
55
|
+
if (line === '---' && foundFirstDocument) {
|
|
56
|
+
const lineStartOffset = text.split('\n').slice(0, i).join('\n').length + (i > 0 ? 1 : 0);
|
|
57
|
+
// Check if suppressed
|
|
58
|
+
if (!(0, directives_1.isDiagnosticSuppressed)(i, directives, 'trigger-best-practices')) {
|
|
59
|
+
diagnostics.push({
|
|
60
|
+
severity: node_1.DiagnosticSeverity.Information,
|
|
61
|
+
range: {
|
|
62
|
+
start: textDocument.positionAt(lineStartOffset),
|
|
63
|
+
end: textDocument.positionAt(lineStartOffset + line.length)
|
|
64
|
+
},
|
|
65
|
+
message: 'Multi-document YAML detected. Consider using list format (- id: ...) for better compatibility and clearer semantics.',
|
|
66
|
+
source: 'trigger-best-practices',
|
|
67
|
+
tags: [1] // DiagnosticTag.Unnecessary would be [1] - marks as hint
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
break; // Only show once per file
|
|
71
|
+
}
|
|
72
|
+
// Track that we've seen content
|
|
73
|
+
if (line.length > 0 && !line.startsWith('#')) {
|
|
74
|
+
foundFirstDocument = true;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// 1.6 Validate import directives
|
|
78
|
+
const importDiagnostics = validateImportDirectives(textDocument, text);
|
|
79
|
+
for (const diagnostic of importDiagnostics) {
|
|
80
|
+
// Check if diagnostic is suppressed
|
|
81
|
+
const line = diagnostic.range.start.line;
|
|
82
|
+
if (!(0, directives_1.isDiagnosticSuppressed)(line, directives, 'trigger-import-validator')) {
|
|
83
|
+
diagnostics.push(diagnostic);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// 2. Semantic Validation (ArkType)
|
|
87
|
+
// We attempt validation even if there are syntax errors
|
|
88
|
+
try {
|
|
89
|
+
const json = doc.toJS();
|
|
90
|
+
if (json && typeof json === 'object') {
|
|
91
|
+
// Handle Wrapper Object (Headers), Array of Rules, or Single Rule
|
|
92
|
+
let items = [];
|
|
93
|
+
// Check if it's a wrapper object with "rules"
|
|
94
|
+
const isWrapper = !Array.isArray(json) && json.rules && Array.isArray(json.rules);
|
|
95
|
+
const isArray = Array.isArray(json);
|
|
96
|
+
if (isWrapper) {
|
|
97
|
+
items = json.rules;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
items = isArray ? json : [json];
|
|
101
|
+
}
|
|
102
|
+
items.forEach((item, index) => {
|
|
103
|
+
// Check for missing 'id' field
|
|
104
|
+
if (item && typeof item === 'object' && !item.id) {
|
|
105
|
+
let fullPathParts = ['id'];
|
|
106
|
+
if (isWrapper) {
|
|
107
|
+
fullPathParts.unshift(String(index));
|
|
108
|
+
fullPathParts.unshift('rules');
|
|
109
|
+
}
|
|
110
|
+
else if (isArray) {
|
|
111
|
+
fullPathParts.unshift(String(index));
|
|
112
|
+
}
|
|
113
|
+
const range = findRangeForPath(doc.contents, fullPathParts.slice(0, -1), textDocument);
|
|
114
|
+
const line = range.start.line;
|
|
115
|
+
if (!(0, directives_1.isDiagnosticSuppressed)(line, directives, 'trigger-validator')) {
|
|
116
|
+
diagnostics.push({
|
|
117
|
+
severity: node_1.DiagnosticSeverity.Error,
|
|
118
|
+
range: range,
|
|
119
|
+
message: 'Rule is missing required field: id. Every rule must have a unique identifier.',
|
|
120
|
+
source: 'trigger-validator'
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (item && typeof item === 'object' && item.actions && !item.do) {
|
|
125
|
+
item.do = item.actions;
|
|
126
|
+
}
|
|
127
|
+
const result = validator_1.TriggerValidator.validate(item);
|
|
128
|
+
if (!result.valid) {
|
|
129
|
+
for (const issue of result.issues) {
|
|
130
|
+
let fullPathParts = issue.path.split('.');
|
|
131
|
+
if (isWrapper) {
|
|
132
|
+
fullPathParts.unshift(String(index));
|
|
133
|
+
fullPathParts.unshift('rules');
|
|
134
|
+
}
|
|
135
|
+
else if (isArray) {
|
|
136
|
+
fullPathParts.unshift(String(index));
|
|
137
|
+
}
|
|
138
|
+
const range = findRangeForPath(doc.contents, fullPathParts, textDocument);
|
|
139
|
+
const line = range.start.line;
|
|
140
|
+
if (!(0, directives_1.isDiagnosticSuppressed)(line, directives, 'trigger-validator')) {
|
|
141
|
+
diagnostics.push({
|
|
142
|
+
severity: node_1.DiagnosticSeverity.Error,
|
|
143
|
+
range: range,
|
|
144
|
+
message: issue.message + (issue.suggestion ? ` (Suggestion: ${issue.suggestion})` : ''),
|
|
145
|
+
source: 'trigger-validator'
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
// verification failed, likely due to severe syntax errors, which are already reported.
|
|
155
|
+
}
|
|
156
|
+
return diagnostics;
|
|
157
|
+
}
|
|
158
|
+
function findRangeForPath(contents, pathParts, textDocument) {
|
|
159
|
+
let current = contents;
|
|
160
|
+
let parentNode = null;
|
|
161
|
+
let lastFoundIndex = -1;
|
|
162
|
+
for (let i = 0; i < pathParts.length; i++) {
|
|
163
|
+
const key = pathParts[i];
|
|
164
|
+
if (!current)
|
|
165
|
+
break;
|
|
166
|
+
parentNode = current; // Keep track of parent
|
|
167
|
+
lastFoundIndex = i;
|
|
168
|
+
if ((0, yaml_1.isMap)(current)) {
|
|
169
|
+
// current is YAMLMap
|
|
170
|
+
const pair = current.items.find((p) => {
|
|
171
|
+
if (isScalar(p.key) && String(p.key.value) === key)
|
|
172
|
+
return true;
|
|
173
|
+
return false;
|
|
174
|
+
});
|
|
175
|
+
if (pair && pair.value) {
|
|
176
|
+
current = pair.value;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
// Key not found in map
|
|
180
|
+
current = null;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else if ((0, yaml_1.isSeq)(current)) {
|
|
185
|
+
// current is YAMLSeq
|
|
186
|
+
const idx = parseInt(key);
|
|
187
|
+
if (!isNaN(idx) && current.items[idx]) {
|
|
188
|
+
current = current.items[idx];
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
current = null;
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
current = null;
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// If we found the node, return its range
|
|
201
|
+
// NOTE: Only Node types have range, not Pair types
|
|
202
|
+
if (current && current.range) {
|
|
203
|
+
return {
|
|
204
|
+
start: textDocument.positionAt(current.range[0]),
|
|
205
|
+
end: textDocument.positionAt(current.range[1])
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
// If we couldn't find the exact path, but found a parent, use parent's range
|
|
209
|
+
// This happens when a required field is missing
|
|
210
|
+
if (parentNode && parentNode.range) {
|
|
211
|
+
// Try to find the specific key that's missing
|
|
212
|
+
const missingKey = pathParts[lastFoundIndex + 1];
|
|
213
|
+
// If the parent is a map and we know which key is missing
|
|
214
|
+
if ((0, yaml_1.isMap)(parentNode) && missingKey) {
|
|
215
|
+
// Position the error after the last item in the map
|
|
216
|
+
// This gives better context than position (0,0)
|
|
217
|
+
const lastItem = parentNode.items[parentNode.items.length - 1];
|
|
218
|
+
// Pairs don't have range, but their value nodes do
|
|
219
|
+
if (lastItem && 'value' in lastItem && lastItem.value) {
|
|
220
|
+
const valueNode = lastItem.value;
|
|
221
|
+
if (valueNode.range) {
|
|
222
|
+
const pos = textDocument.positionAt(valueNode.range[1]);
|
|
223
|
+
return {
|
|
224
|
+
start: pos,
|
|
225
|
+
end: pos
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Otherwise use the start of the parent node
|
|
231
|
+
if ('range' in parentNode && parentNode.range) {
|
|
232
|
+
return {
|
|
233
|
+
start: textDocument.positionAt(parentNode.range[0]),
|
|
234
|
+
end: textDocument.positionAt(parentNode.range[0])
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Last resort: try to find the rule that has the issue
|
|
239
|
+
// For array indices, go back and find the rule
|
|
240
|
+
if (pathParts.length > 0 && !isNaN(parseInt(pathParts[0]))) {
|
|
241
|
+
const ruleIndex = parseInt(pathParts[0]);
|
|
242
|
+
if ((0, yaml_1.isSeq)(contents) && contents.items[ruleIndex]) {
|
|
243
|
+
const ruleNode = contents.items[ruleIndex];
|
|
244
|
+
if (ruleNode && 'range' in ruleNode && ruleNode.range) {
|
|
245
|
+
return {
|
|
246
|
+
start: textDocument.positionAt(ruleNode.range[0]),
|
|
247
|
+
end: textDocument.positionAt(ruleNode.range[0])
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Absolute fallback
|
|
253
|
+
return {
|
|
254
|
+
start: textDocument.positionAt(0),
|
|
255
|
+
end: textDocument.positionAt(0)
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function isScalar(node) {
|
|
259
|
+
return node && node.type !== undefined && (node.type === 'SCALAR' || node.type === 'QUOTE_DOUBLE' || node.type === 'QUOTE_SINGLE' || typeof node.value !== 'undefined');
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Validate import directives and return diagnostics for invalid imports
|
|
263
|
+
*/
|
|
264
|
+
function validateImportDirectives(document, text) {
|
|
265
|
+
const diagnostics = [];
|
|
266
|
+
const directives = (0, directives_1.parseDirectives)(document);
|
|
267
|
+
for (const directive of directives) {
|
|
268
|
+
if (directive.type === 'import' && directive.importPath) {
|
|
269
|
+
try {
|
|
270
|
+
// Handle test URIs and real file URIs
|
|
271
|
+
let documentDir;
|
|
272
|
+
if (document.uri === 'file://test' || document.uri === 'file:///test') {
|
|
273
|
+
// For test documents, use the directory where test files are located
|
|
274
|
+
documentDir = (0, path_1.join)(process.cwd(), 'tests', 'rules', 'examples');
|
|
275
|
+
console.log(`[LSP] Test document detected, using test directory: ${documentDir}`);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Resolve the path relative to the document
|
|
279
|
+
const decodedUri = decodeURIComponent(document.uri);
|
|
280
|
+
// Handle Windows file URIs properly
|
|
281
|
+
let documentPath;
|
|
282
|
+
if (decodedUri.startsWith('file:///')) {
|
|
283
|
+
// Remove file:/// prefix
|
|
284
|
+
documentPath = decodedUri.substring(8);
|
|
285
|
+
// Handle Windows drive letters (C:, D:, etc.)
|
|
286
|
+
if (documentPath.match(/^[A-Za-z]:/)) {
|
|
287
|
+
// Already has drive letter, just replace forward slashes
|
|
288
|
+
documentPath = documentPath.replace(/\//g, '\\');
|
|
289
|
+
}
|
|
290
|
+
else if (documentPath.match(/^\/[A-Za-z]:/)) {
|
|
291
|
+
// Has leading slash before drive letter, remove it
|
|
292
|
+
documentPath = documentPath.substring(1).replace(/\//g, '\\');
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
// Unix-style path, keep as is
|
|
296
|
+
documentPath = documentPath.replace(/\//g, '/');
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
// Fallback for non-file URIs
|
|
301
|
+
documentPath = decodedUri.replace('file:///', '');
|
|
302
|
+
}
|
|
303
|
+
documentDir = (0, path_1.dirname)(documentPath);
|
|
304
|
+
}
|
|
305
|
+
const resolvedPath = (0, path_1.join)(documentDir, directive.importPath);
|
|
306
|
+
// Debug logging
|
|
307
|
+
console.log(`[LSP] Import validation debug:`);
|
|
308
|
+
console.log(`[LSP] Document URI: ${document.uri}`);
|
|
309
|
+
console.log(`[LSP] Document dir: ${documentDir}`);
|
|
310
|
+
console.log(`[LSP] Import path: ${directive.importPath}`);
|
|
311
|
+
console.log(`[LSP] Resolved path: ${resolvedPath}`);
|
|
312
|
+
console.log(`[LSP] File exists: ${(0, fs_1.existsSync)(resolvedPath)}`);
|
|
313
|
+
// Check if file exists
|
|
314
|
+
if (!(0, fs_1.existsSync)(resolvedPath)) {
|
|
315
|
+
// Find the line and character position of the import path in the directive
|
|
316
|
+
const lines = text.split('\n');
|
|
317
|
+
const line = lines[directive.line] || '';
|
|
318
|
+
const importPathMatch = line.match(new RegExp(`['"]${directive.importPath.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}['"]`));
|
|
319
|
+
let startChar = line.indexOf(directive.importPath);
|
|
320
|
+
let endChar = startChar + directive.importPath.length;
|
|
321
|
+
if (importPathMatch) {
|
|
322
|
+
startChar = importPathMatch.index || startChar;
|
|
323
|
+
endChar = startChar + importPathMatch[0].length;
|
|
324
|
+
}
|
|
325
|
+
diagnostics.push({
|
|
326
|
+
severity: node_1.DiagnosticSeverity.Error,
|
|
327
|
+
range: {
|
|
328
|
+
start: { line: directive.line, character: startChar },
|
|
329
|
+
end: { line: directive.line, character: endChar }
|
|
330
|
+
},
|
|
331
|
+
message: `Import file not found: ${directive.importPath}`,
|
|
332
|
+
source: 'trigger-import-validator',
|
|
333
|
+
data: {
|
|
334
|
+
suggestion: `Check that the file exists at the specified path: ${resolvedPath}`
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
// Check file extension
|
|
340
|
+
const ext = (0, path_1.extname)(resolvedPath).toLowerCase();
|
|
341
|
+
const validExtensions = ['.json', '.yaml', '.yml'];
|
|
342
|
+
if (!validExtensions.includes(ext)) {
|
|
343
|
+
const lines = text.split('\n');
|
|
344
|
+
const line = lines[directive.line] || '';
|
|
345
|
+
const importPathMatch = line.match(new RegExp(`['"]${directive.importPath.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}['"]`));
|
|
346
|
+
let startChar = line.indexOf(directive.importPath);
|
|
347
|
+
let endChar = startChar + directive.importPath.length;
|
|
348
|
+
if (importPathMatch) {
|
|
349
|
+
startChar = importPathMatch.index || startChar;
|
|
350
|
+
endChar = startChar + importPathMatch[0].length;
|
|
351
|
+
}
|
|
352
|
+
diagnostics.push({
|
|
353
|
+
severity: node_1.DiagnosticSeverity.Error,
|
|
354
|
+
range: {
|
|
355
|
+
start: { line: directive.line, character: startChar },
|
|
356
|
+
end: { line: directive.line, character: endChar }
|
|
357
|
+
},
|
|
358
|
+
message: `Invalid file type for import: ${ext}. Only JSON and YAML files are supported.`,
|
|
359
|
+
source: 'trigger-import-validator',
|
|
360
|
+
data: {
|
|
361
|
+
suggestion: 'Use a .json, .yaml, or .yml file for data imports.'
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
console.error(`[LSP] Error validating import directive:`, error);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return diagnostics;
|
|
372
|
+
}
|
|
373
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/lsp/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { TextDocument } from 'vscode-languageserver-textdocument';
|
|
2
|
+
/**
|
|
3
|
+
* Directive types supported in comments
|
|
4
|
+
*/
|
|
5
|
+
export type DirectiveType = 'disable-lint' | 'enable-lint' | 'disable-next-line' | 'disable-line' | 'disable-rule' | 'enable-rule' | 'import';
|
|
6
|
+
export interface Directive {
|
|
7
|
+
type: DirectiveType;
|
|
8
|
+
line: number;
|
|
9
|
+
rules?: string[];
|
|
10
|
+
affectedLines: number[];
|
|
11
|
+
importPath?: string;
|
|
12
|
+
importAlias?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Parse directives from document comments
|
|
16
|
+
* Supported formats:
|
|
17
|
+
* - @disable-lint
|
|
18
|
+
* - @enable-lint
|
|
19
|
+
* - @disable-next-line
|
|
20
|
+
* - @disable-line
|
|
21
|
+
* - @disable-rule rule-name, rule-name2
|
|
22
|
+
* - @enable-rule rule-name
|
|
23
|
+
* - @import alias from './path/to/file.json'
|
|
24
|
+
* - @import alias from './path/to/file.yaml'
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseDirectives(document: TextDocument): Directive[];
|
|
27
|
+
/**
|
|
28
|
+
* Check if diagnostics should be suppressed for a given line
|
|
29
|
+
*/
|
|
30
|
+
export declare function isDiagnosticSuppressed(line: number, directives: Directive[], diagnosticSource?: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Process directives that affect ranges
|
|
33
|
+
* This handles block-level directives like @disable-lint ... @enable-lint
|
|
34
|
+
*/
|
|
35
|
+
export declare function processRangeDirectives(directives: Directive[]): Directive[];
|
|
36
|
+
/**
|
|
37
|
+
* Extract import directives from a document
|
|
38
|
+
* Returns array of import directives with resolved paths
|
|
39
|
+
*/
|
|
40
|
+
export declare function getImportDirectives(document: TextDocument, documentUri: string): Array<{
|
|
41
|
+
alias: string;
|
|
42
|
+
path: string;
|
|
43
|
+
}>;
|
|
44
|
+
//# sourceMappingURL=directives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directives.d.ts","sourceRoot":"","sources":["../../../src/lsp/directives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAGvE;;GAEG;AACH,MAAM,MAAM,aAAa,GACnB,cAAc,GACd,aAAa,GACb,mBAAmB,GACnB,cAAc,GACd,cAAc,GACd,aAAa,GACb,QAAQ,CAAC;AAEf,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,CA+CnE;AAgED;;GAEG;AACH,wBAAgB,sBAAsB,CAClC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,EAAE,EACvB,gBAAgB,CAAC,EAAE,MAAM,GAC1B,OAAO,CA6BT;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CA6B3E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAyDvH"}
|