tailwind-typescript-plugin 1.4.0-beta.1 → 1.4.0-beta.11
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/CHANGELOG.md +73 -0
- package/README.md +373 -34
- package/lib/core/interfaces.d.ts +2 -2
- package/lib/core/interfaces.d.ts.map +1 -1
- package/lib/core/types.d.ts +27 -1
- package/lib/core/types.d.ts.map +1 -1
- package/lib/extractors/BaseExtractor.d.ts +49 -2
- package/lib/extractors/BaseExtractor.d.ts.map +1 -1
- package/lib/extractors/BaseExtractor.js +184 -5
- package/lib/extractors/BaseExtractor.js.map +1 -1
- package/lib/extractors/CvaExtractor.d.ts.map +1 -1
- package/lib/extractors/CvaExtractor.js +7 -3
- package/lib/extractors/CvaExtractor.js.map +1 -1
- package/lib/extractors/ExpressionExtractor.d.ts.map +1 -1
- package/lib/extractors/ExpressionExtractor.js +35 -5
- package/lib/extractors/ExpressionExtractor.js.map +1 -1
- package/lib/extractors/JsxAttributeExtractor.js +1 -1
- package/lib/extractors/JsxAttributeExtractor.js.map +1 -1
- package/lib/extractors/TailwindVariantsExtractor.d.ts +2 -0
- package/lib/extractors/TailwindVariantsExtractor.d.ts.map +1 -1
- package/lib/extractors/TailwindVariantsExtractor.js +12 -8
- package/lib/extractors/TailwindVariantsExtractor.js.map +1 -1
- package/lib/extractors/VariableReferenceExtractor.d.ts.map +1 -1
- package/lib/extractors/VariableReferenceExtractor.js +21 -0
- package/lib/extractors/VariableReferenceExtractor.js.map +1 -1
- package/lib/infrastructure/TailwindConflictDetector.d.ts +83 -0
- package/lib/infrastructure/TailwindConflictDetector.d.ts.map +1 -0
- package/lib/infrastructure/TailwindConflictDetector.js +342 -0
- package/lib/infrastructure/TailwindConflictDetector.js.map +1 -0
- package/lib/infrastructure/TailwindValidator.d.ts +15 -0
- package/lib/infrastructure/TailwindValidator.d.ts.map +1 -1
- package/lib/infrastructure/TailwindValidator.js +84 -5
- package/lib/infrastructure/TailwindValidator.js.map +1 -1
- package/lib/infrastructure/TailwindValidator.spec.js +194 -0
- package/lib/infrastructure/TailwindValidator.spec.js.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.d.ts +26 -0
- package/lib/plugin/TailwindTypescriptPlugin.d.ts.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.js +180 -1
- package/lib/plugin/TailwindTypescriptPlugin.js.map +1 -1
- package/lib/services/ClassNameExtractionService.d.ts +2 -2
- package/lib/services/ClassNameExtractionService.d.ts.map +1 -1
- package/lib/services/ClassNameExtractionService.js.map +1 -1
- package/lib/services/CompletionService.d.ts +98 -0
- package/lib/services/CompletionService.d.ts.map +1 -0
- package/lib/services/CompletionService.js +484 -0
- package/lib/services/CompletionService.js.map +1 -0
- package/lib/services/CompletionService.spec.d.ts +2 -0
- package/lib/services/CompletionService.spec.d.ts.map +1 -0
- package/lib/services/CompletionService.spec.js +334 -0
- package/lib/services/CompletionService.spec.js.map +1 -0
- package/lib/services/ConflictClassDetection.spec.d.ts +2 -0
- package/lib/services/ConflictClassDetection.spec.d.ts.map +1 -0
- package/lib/services/ConflictClassDetection.spec.js +477 -0
- package/lib/services/ConflictClassDetection.spec.js.map +1 -0
- package/lib/services/DiagnosticService.d.ts +14 -0
- package/lib/services/DiagnosticService.d.ts.map +1 -1
- package/lib/services/DiagnosticService.js +32 -1
- package/lib/services/DiagnosticService.js.map +1 -1
- package/lib/services/DuplicateClassDetection.spec.js +41 -60
- package/lib/services/DuplicateClassDetection.spec.js.map +1 -1
- package/lib/services/PluginConfigService.d.ts +2 -1
- package/lib/services/PluginConfigService.d.ts.map +1 -1
- package/lib/services/PluginConfigService.js +19 -12
- package/lib/services/PluginConfigService.js.map +1 -1
- package/lib/services/ValidationService.d.ts +5 -2
- package/lib/services/ValidationService.d.ts.map +1 -1
- package/lib/services/ValidationService.js +22 -9
- package/lib/services/ValidationService.js.map +1 -1
- package/package.json +4 -2
- package/lib/extractors/StringLiteralExtractor.d.ts +0 -12
- package/lib/extractors/StringLiteralExtractor.d.ts.map +0 -1
- package/lib/extractors/StringLiteralExtractor.js +0 -21
- package/lib/extractors/StringLiteralExtractor.js.map +0 -1
- package/lib/services/ClassNameExtractionService.original.d.ts +0 -20
- package/lib/services/ClassNameExtractionService.original.d.ts.map +0 -1
- package/lib/services/ClassNameExtractionService.original.js +0 -48
- package/lib/services/ClassNameExtractionService.original.js.map +0 -1
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const ts = __importStar(require("typescript/lib/tsserverlibrary"));
|
|
37
|
+
const TailwindValidator_1 = require("../infrastructure/TailwindValidator");
|
|
38
|
+
const Logger_1 = require("../utils/Logger");
|
|
39
|
+
const CompletionService_1 = require("./CompletionService");
|
|
40
|
+
describe('CompletionService', () => {
|
|
41
|
+
let validator;
|
|
42
|
+
let completionService;
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
validator = new TailwindValidator_1.TailwindValidator('/fake/path.css', new Logger_1.NoOpLogger());
|
|
45
|
+
// Mock the validator methods
|
|
46
|
+
jest
|
|
47
|
+
.spyOn(validator, 'getAllClasses')
|
|
48
|
+
.mockReturnValue([
|
|
49
|
+
'flex',
|
|
50
|
+
'flex-row',
|
|
51
|
+
'flex-col',
|
|
52
|
+
'items-center',
|
|
53
|
+
'items-start',
|
|
54
|
+
'items-end',
|
|
55
|
+
'justify-center',
|
|
56
|
+
'justify-between',
|
|
57
|
+
'p-4',
|
|
58
|
+
'px-4',
|
|
59
|
+
'py-4',
|
|
60
|
+
'bg-red-500',
|
|
61
|
+
'bg-blue-500',
|
|
62
|
+
'text-white',
|
|
63
|
+
'text-black'
|
|
64
|
+
]);
|
|
65
|
+
jest.spyOn(validator, 'isValidClass').mockImplementation((className) => {
|
|
66
|
+
return validator.getAllClasses().includes(className);
|
|
67
|
+
});
|
|
68
|
+
jest.spyOn(validator, 'getCssForClasses').mockImplementation((classNames) => {
|
|
69
|
+
return classNames.map(name => {
|
|
70
|
+
if (name === 'flex')
|
|
71
|
+
return '.flex { display: flex; }';
|
|
72
|
+
if (name === 'p-4')
|
|
73
|
+
return '.p-4 { padding: 1rem; }';
|
|
74
|
+
return null;
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
completionService = new CompletionService_1.CompletionService(validator, new Logger_1.NoOpLogger());
|
|
78
|
+
});
|
|
79
|
+
describe('getCompletionsAtPosition', () => {
|
|
80
|
+
it('should return original completions when not in className context', () => {
|
|
81
|
+
const sourceCode = 'const x = 1;';
|
|
82
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
83
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, 5, // Position in "const"
|
|
84
|
+
undefined);
|
|
85
|
+
expect(result).toBeUndefined();
|
|
86
|
+
});
|
|
87
|
+
it('should provide completions inside className attribute', () => {
|
|
88
|
+
const sourceCode = '<div className="">Hello</div>';
|
|
89
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
90
|
+
// Position inside the empty className string (after the opening quote)
|
|
91
|
+
const position = 16;
|
|
92
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
|
|
93
|
+
expect(result).toBeDefined();
|
|
94
|
+
expect(result.entries.length).toBeGreaterThan(0);
|
|
95
|
+
// Should include flex classes
|
|
96
|
+
const flexEntry = result.entries.find(e => e.name === 'flex');
|
|
97
|
+
expect(flexEntry).toBeDefined();
|
|
98
|
+
});
|
|
99
|
+
it('should filter completions based on prefix', () => {
|
|
100
|
+
const sourceCode = '<div className="fl">Hello</div>';
|
|
101
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
102
|
+
// Position after "fl"
|
|
103
|
+
const position = 18;
|
|
104
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
|
|
105
|
+
expect(result).toBeDefined();
|
|
106
|
+
// Should only include classes starting with "fl"
|
|
107
|
+
const allStartWithFl = result.entries.every(e => e.name.toLowerCase().startsWith('fl'));
|
|
108
|
+
expect(allStartWithFl).toBe(true);
|
|
109
|
+
// Should include flex, flex-row, flex-col
|
|
110
|
+
const names = result.entries.map(e => e.name);
|
|
111
|
+
expect(names).toContain('flex');
|
|
112
|
+
expect(names).toContain('flex-row');
|
|
113
|
+
expect(names).toContain('flex-col');
|
|
114
|
+
});
|
|
115
|
+
it('should provide completions after space in className', () => {
|
|
116
|
+
const sourceCode = '<div className="flex ">Hello</div>';
|
|
117
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
118
|
+
// Position after "flex " (after the space)
|
|
119
|
+
const position = 21;
|
|
120
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
|
|
121
|
+
expect(result).toBeDefined();
|
|
122
|
+
// Should provide all classes except "flex" which is already present
|
|
123
|
+
const names = result.entries.map(e => e.name);
|
|
124
|
+
expect(names).not.toContain('flex');
|
|
125
|
+
expect(names).toContain('items-center');
|
|
126
|
+
});
|
|
127
|
+
it('should exclude already existing classes from completions', () => {
|
|
128
|
+
// className="flex items-center p"
|
|
129
|
+
// Position: 16 21 35
|
|
130
|
+
const sourceCode = '<div className="flex items-center p">Hello</div>';
|
|
131
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
132
|
+
// Position after "p" (typing a new class) - position 35 is after the "p"
|
|
133
|
+
const position = 35;
|
|
134
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
|
|
135
|
+
expect(result).toBeDefined();
|
|
136
|
+
const names = result.entries.map(e => e.name);
|
|
137
|
+
// Should not include already present classes
|
|
138
|
+
expect(names).not.toContain('flex');
|
|
139
|
+
expect(names).not.toContain('items-center');
|
|
140
|
+
// Should include p-4, px-4, py-4 as they match the "p" prefix
|
|
141
|
+
expect(names).toContain('p-4');
|
|
142
|
+
expect(names).toContain('px-4');
|
|
143
|
+
expect(names).toContain('py-4');
|
|
144
|
+
});
|
|
145
|
+
it('should provide completions in utility function arguments', () => {
|
|
146
|
+
const sourceCode = 'const classes = cn("flex ", isActive && "");';
|
|
147
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
148
|
+
// Position inside the second empty string in cn()
|
|
149
|
+
const position = 41;
|
|
150
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
|
|
151
|
+
expect(result).toBeDefined();
|
|
152
|
+
expect(result.entries.length).toBeGreaterThan(0);
|
|
153
|
+
});
|
|
154
|
+
it('should provide completions in clsx function', () => {
|
|
155
|
+
const sourceCode = 'const classes = clsx("f");';
|
|
156
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
157
|
+
// Position after "f"
|
|
158
|
+
const position = 23;
|
|
159
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
|
|
160
|
+
expect(result).toBeDefined();
|
|
161
|
+
// Should include classes starting with "f"
|
|
162
|
+
const names = result.entries.map(e => e.name);
|
|
163
|
+
expect(names).toContain('flex');
|
|
164
|
+
});
|
|
165
|
+
it('should provide completions in object property className', () => {
|
|
166
|
+
const sourceCode = 'const obj = { className: "fl" };';
|
|
167
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
168
|
+
// Position after "fl"
|
|
169
|
+
const position = 28;
|
|
170
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
|
|
171
|
+
expect(result).toBeDefined();
|
|
172
|
+
const names = result.entries.map(e => e.name);
|
|
173
|
+
expect(names).toContain('flex');
|
|
174
|
+
});
|
|
175
|
+
it('should set correct replacement span for partial class names', () => {
|
|
176
|
+
const sourceCode = '<div className="flex ite">Hello</div>';
|
|
177
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
178
|
+
// Position after "ite"
|
|
179
|
+
const position = 24;
|
|
180
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, position, undefined);
|
|
181
|
+
expect(result).toBeDefined();
|
|
182
|
+
// Each entry should have a replacement span
|
|
183
|
+
const itemsCenter = result.entries.find(e => e.name === 'items-center');
|
|
184
|
+
expect(itemsCenter).toBeDefined();
|
|
185
|
+
expect(itemsCenter.replacementSpan).toBeDefined();
|
|
186
|
+
expect(itemsCenter.replacementSpan.length).toBe(3); // "ite" length
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe('getCompletionEntryDetails', () => {
|
|
190
|
+
it('should return CSS documentation for valid Tailwind class', () => {
|
|
191
|
+
const sourceCode = '<div className="flex">Hello</div>';
|
|
192
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
193
|
+
const result = completionService.getCompletionEntryDetails(ts, sourceFile, 16, 'flex');
|
|
194
|
+
expect(result).toBeDefined();
|
|
195
|
+
expect(result.name).toBe('flex');
|
|
196
|
+
expect(result.documentation).toBeDefined();
|
|
197
|
+
expect(result.documentation.length).toBeGreaterThan(0);
|
|
198
|
+
expect(result.documentation[0].text).toContain('display: flex');
|
|
199
|
+
});
|
|
200
|
+
it('should format documentation with markdown CSS code block', () => {
|
|
201
|
+
const sourceCode = '<div className="flex">Hello</div>';
|
|
202
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
203
|
+
const result = completionService.getCompletionEntryDetails(ts, sourceFile, 16, 'flex');
|
|
204
|
+
expect(result).toBeDefined();
|
|
205
|
+
expect(result.documentation).toBeDefined();
|
|
206
|
+
// Documentation should be wrapped in markdown CSS code block for syntax highlighting
|
|
207
|
+
const docText = result.documentation[0].text;
|
|
208
|
+
expect(docText).toContain('```css');
|
|
209
|
+
expect(docText).toContain('```');
|
|
210
|
+
});
|
|
211
|
+
it('should provide short CSS summary in displayParts', () => {
|
|
212
|
+
const sourceCode = '<div className="flex">Hello</div>';
|
|
213
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
214
|
+
const result = completionService.getCompletionEntryDetails(ts, sourceFile, 16, 'flex');
|
|
215
|
+
expect(result).toBeDefined();
|
|
216
|
+
expect(result.displayParts).toBeDefined();
|
|
217
|
+
expect(result.displayParts.length).toBeGreaterThan(0);
|
|
218
|
+
// displayParts should contain just the declaration (e.g., "display: flex;")
|
|
219
|
+
const displayText = result.displayParts[0].text;
|
|
220
|
+
expect(displayText).toContain('display: flex');
|
|
221
|
+
expect(displayText).not.toContain('.flex');
|
|
222
|
+
expect(displayText).not.toContain('{');
|
|
223
|
+
});
|
|
224
|
+
it('should return undefined for non-Tailwind class', () => {
|
|
225
|
+
const sourceCode = '<div className="my-custom-class">Hello</div>';
|
|
226
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
227
|
+
const result = completionService.getCompletionEntryDetails(ts, sourceFile, 16, 'my-custom-class');
|
|
228
|
+
expect(result).toBeUndefined();
|
|
229
|
+
});
|
|
230
|
+
it('should format CSS with proper indentation', () => {
|
|
231
|
+
// Mock a class with multiple declarations
|
|
232
|
+
jest.spyOn(validator, 'getCssForClasses').mockImplementation((classNames) => {
|
|
233
|
+
return classNames.map(name => {
|
|
234
|
+
if (name === 'p-4')
|
|
235
|
+
return '.p-4 { padding-top: 1rem; padding-right: 1rem; padding-bottom: 1rem; padding-left: 1rem; }';
|
|
236
|
+
return null;
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
const sourceCode = '<div className="p-4">Hello</div>';
|
|
240
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
241
|
+
const result = completionService.getCompletionEntryDetails(ts, sourceFile, 16, 'p-4');
|
|
242
|
+
expect(result).toBeDefined();
|
|
243
|
+
const docText = result.documentation[0].text;
|
|
244
|
+
// Should be formatted with newlines for multiple declarations
|
|
245
|
+
expect(docText).toContain('\n');
|
|
246
|
+
expect(docText).toContain('padding-top: 1rem;');
|
|
247
|
+
expect(docText).toContain('padding-right: 1rem;');
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
describe('color class detection', () => {
|
|
251
|
+
it('should mark color classes with "color" kindModifier', () => {
|
|
252
|
+
// Add color classes to the mock
|
|
253
|
+
jest.spyOn(validator, 'getAllClasses').mockReturnValue([
|
|
254
|
+
'flex',
|
|
255
|
+
'bg-red-500',
|
|
256
|
+
'bg-blue-200',
|
|
257
|
+
'text-white',
|
|
258
|
+
'text-black',
|
|
259
|
+
'border-gray-300',
|
|
260
|
+
'ring-indigo-500',
|
|
261
|
+
'text-sm', // not a color
|
|
262
|
+
'border-2' // not a color
|
|
263
|
+
]);
|
|
264
|
+
const sourceCode = '<div className="">Hello</div>';
|
|
265
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
266
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, 16, undefined);
|
|
267
|
+
expect(result).toBeDefined();
|
|
268
|
+
// Color classes should have 'color' kindModifier
|
|
269
|
+
const bgRed = result.entries.find(e => e.name === 'bg-red-500');
|
|
270
|
+
expect(bgRed?.kindModifiers).toBe('color');
|
|
271
|
+
const textWhite = result.entries.find(e => e.name === 'text-white');
|
|
272
|
+
expect(textWhite?.kindModifiers).toBe('color');
|
|
273
|
+
const borderGray = result.entries.find(e => e.name === 'border-gray-300');
|
|
274
|
+
expect(borderGray?.kindModifiers).toBe('color');
|
|
275
|
+
// Non-color classes should have empty kindModifier
|
|
276
|
+
const flexEntry = result.entries.find(e => e.name === 'flex');
|
|
277
|
+
expect(flexEntry?.kindModifiers).toBe('');
|
|
278
|
+
const textSm = result.entries.find(e => e.name === 'text-sm');
|
|
279
|
+
expect(textSm?.kindModifiers).toBe('');
|
|
280
|
+
const border2 = result.entries.find(e => e.name === 'border-2');
|
|
281
|
+
expect(border2?.kindModifiers).toBe('');
|
|
282
|
+
});
|
|
283
|
+
it('should detect various color class patterns', () => {
|
|
284
|
+
jest.spyOn(validator, 'getAllClasses').mockReturnValue([
|
|
285
|
+
'from-purple-400', // gradient from
|
|
286
|
+
'via-pink-500', // gradient via
|
|
287
|
+
'to-red-500', // gradient to
|
|
288
|
+
'fill-current', // SVG fill
|
|
289
|
+
'stroke-blue-600', // SVG stroke
|
|
290
|
+
'accent-violet-500', // accent color
|
|
291
|
+
'shadow-sm', // not a color (shadow size)
|
|
292
|
+
'outline-none', // not a color (outline style)
|
|
293
|
+
'divide-y', // not a color (divide direction)
|
|
294
|
+
'text-center' // not a color (text alignment)
|
|
295
|
+
]);
|
|
296
|
+
const sourceCode = '<div className="">Hello</div>';
|
|
297
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
298
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, 16, undefined);
|
|
299
|
+
expect(result).toBeDefined();
|
|
300
|
+
// Color classes
|
|
301
|
+
expect(result.entries.find(e => e.name === 'from-purple-400')?.kindModifiers).toBe('color');
|
|
302
|
+
expect(result.entries.find(e => e.name === 'via-pink-500')?.kindModifiers).toBe('color');
|
|
303
|
+
expect(result.entries.find(e => e.name === 'to-red-500')?.kindModifiers).toBe('color');
|
|
304
|
+
expect(result.entries.find(e => e.name === 'fill-current')?.kindModifiers).toBe('color');
|
|
305
|
+
expect(result.entries.find(e => e.name === 'stroke-blue-600')?.kindModifiers).toBe('color');
|
|
306
|
+
expect(result.entries.find(e => e.name === 'accent-violet-500')?.kindModifiers).toBe('color');
|
|
307
|
+
// Non-color classes
|
|
308
|
+
expect(result.entries.find(e => e.name === 'shadow-sm')?.kindModifiers).toBe('');
|
|
309
|
+
expect(result.entries.find(e => e.name === 'outline-none')?.kindModifiers).toBe('');
|
|
310
|
+
expect(result.entries.find(e => e.name === 'divide-y')?.kindModifiers).toBe('');
|
|
311
|
+
expect(result.entries.find(e => e.name === 'text-center')?.kindModifiers).toBe('');
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
describe('clearCache', () => {
|
|
315
|
+
it('should clear the cached class list', () => {
|
|
316
|
+
const sourceCode = '<div className="">Hello</div>';
|
|
317
|
+
const sourceFile = ts.createSourceFile('test.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
318
|
+
// First call to populate cache
|
|
319
|
+
completionService.getCompletionsAtPosition(ts, sourceFile, 16, undefined);
|
|
320
|
+
// Clear cache
|
|
321
|
+
completionService.clearCache();
|
|
322
|
+
// Mock different classes
|
|
323
|
+
jest.spyOn(validator, 'getAllClasses').mockReturnValue(['new-class', 'another-class']);
|
|
324
|
+
// Get completions again
|
|
325
|
+
const result = completionService.getCompletionsAtPosition(ts, sourceFile, 16, undefined);
|
|
326
|
+
expect(result).toBeDefined();
|
|
327
|
+
const names = result.entries.map(e => e.name);
|
|
328
|
+
expect(names).toContain('new-class');
|
|
329
|
+
expect(names).toContain('another-class');
|
|
330
|
+
expect(names).not.toContain('flex');
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
//# sourceMappingURL=CompletionService.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompletionService.spec.js","sourceRoot":"","sources":["../../src/services/CompletionService.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConflictClassDetection.spec.d.ts","sourceRoot":"","sources":["../../src/services/ConflictClassDetection.spec.ts"],"names":[],"mappings":""}
|