tailwind-typescript-plugin 1.4.1-beta.11 → 1.4.1-beta.13
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 +12 -0
- package/README.md +212 -143
- package/lib/core/interfaces.d.ts +17 -12
- package/lib/core/interfaces.d.ts.map +1 -1
- package/lib/core/types.d.ts +75 -0
- package/lib/core/types.d.ts.map +1 -1
- package/lib/infrastructure/TailwindValidator.css-vars.spec.js +1 -11
- package/lib/infrastructure/TailwindValidator.css-vars.spec.js.map +1 -1
- package/lib/infrastructure/TailwindValidator.d.ts +1 -3
- package/lib/infrastructure/TailwindValidator.d.ts.map +1 -1
- package/lib/infrastructure/TailwindValidator.js +6 -26
- package/lib/infrastructure/TailwindValidator.js.map +1 -1
- package/lib/infrastructure/TailwindValidator.spec.js +7 -17
- package/lib/infrastructure/TailwindValidator.spec.js.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.d.ts +4 -1
- package/lib/plugin/TailwindTypescriptPlugin.d.ts.map +1 -1
- package/lib/plugin/TailwindTypescriptPlugin.js +49 -56
- package/lib/plugin/TailwindTypescriptPlugin.js.map +1 -1
- package/lib/services/CodeActionService.spec.js +1 -2
- package/lib/services/CodeActionService.spec.js.map +1 -1
- package/lib/services/CompletionService.d.ts +11 -3
- package/lib/services/CompletionService.d.ts.map +1 -1
- package/lib/services/CompletionService.js +97 -12
- package/lib/services/CompletionService.js.map +1 -1
- package/lib/services/CompletionService.spec.js +155 -12
- package/lib/services/CompletionService.spec.js.map +1 -1
- package/lib/services/ConflictClassDetection.spec.js +5 -5
- package/lib/services/ConflictClassDetection.spec.js.map +1 -1
- package/lib/services/DiagnosticService.d.ts +8 -8
- package/lib/services/DiagnosticService.d.ts.map +1 -1
- package/lib/services/DiagnosticService.js +29 -13
- package/lib/services/DiagnosticService.js.map +1 -1
- package/lib/services/DuplicateClassDetection.spec.js +20 -21
- package/lib/services/DuplicateClassDetection.spec.js.map +1 -1
- package/lib/services/PluginConfigService.d.ts +38 -15
- package/lib/services/PluginConfigService.d.ts.map +1 -1
- package/lib/services/PluginConfigService.js +182 -82
- package/lib/services/PluginConfigService.js.map +1 -1
- package/lib/services/ValidationService.d.ts +5 -4
- package/lib/services/ValidationService.d.ts.map +1 -1
- package/lib/services/ValidationService.js +39 -42
- package/lib/services/ValidationService.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,11 +7,11 @@ const TailwindConflictDetector_1 = require("../infrastructure/TailwindConflictDe
|
|
|
7
7
|
* Orchestrates the validation workflow
|
|
8
8
|
*/
|
|
9
9
|
class ValidationService {
|
|
10
|
-
constructor(extractionService, diagnosticService, validator,
|
|
10
|
+
constructor(extractionService, diagnosticService, validator, configService, cssProvider) {
|
|
11
11
|
this.extractionService = extractionService;
|
|
12
12
|
this.diagnosticService = diagnosticService;
|
|
13
13
|
this.validator = validator;
|
|
14
|
-
this.
|
|
14
|
+
this.configService = configService;
|
|
15
15
|
this.conflictDetector = new TailwindConflictDetector_1.TailwindConflictDetector();
|
|
16
16
|
if (cssProvider) {
|
|
17
17
|
this.conflictDetector.setCssProvider(cssProvider);
|
|
@@ -23,50 +23,48 @@ class ValidationService {
|
|
|
23
23
|
*/
|
|
24
24
|
validateFile(typescript, sourceFile, utilityFunctions, typeChecker) {
|
|
25
25
|
if (!this.validator.isInitialized()) {
|
|
26
|
-
this.logger.log(`[ValidationService] Validator not initialized yet for ${sourceFile.fileName}`);
|
|
27
26
|
return [];
|
|
28
27
|
}
|
|
29
|
-
// PERFORMANCE: Only log if enabled
|
|
30
|
-
if (this.logger.isEnabled()) {
|
|
31
|
-
this.logger.log(`[ValidationService] Processing file: ${sourceFile.fileName}`);
|
|
32
|
-
}
|
|
33
28
|
// Extract all class names from the file
|
|
34
29
|
const classNames = this.extractionService.extractFromSourceFile(typescript, sourceFile, utilityFunctions, typeChecker);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
const diagnostics = [];
|
|
31
|
+
// Validation diagnostics (invalid class detection)
|
|
32
|
+
if (this.configService.isValidationEnabled()) {
|
|
33
|
+
const severity = this.configService.getValidationSeverity();
|
|
34
|
+
if (severity !== 'off') {
|
|
35
|
+
const invalidClasses = this.filterInvalidClasses(classNames);
|
|
36
|
+
if (invalidClasses.length > 0) {
|
|
37
|
+
diagnostics.push(...this.diagnosticService.createDiagnostics(invalidClasses, sourceFile, severity));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
38
40
|
}
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (totalIssues > 0) {
|
|
52
|
-
this.logger.log(`[ValidationService] Returning ${invalidClasses.length} invalid + ${trueDuplicates.length} duplicate + ${extractableClasses.length} extractable + ${conflicts.length} conflict diagnostics`);
|
|
41
|
+
// Lint diagnostics (only if lint is enabled globally)
|
|
42
|
+
if (this.configService.isLintEnabled()) {
|
|
43
|
+
// Detect duplicate and extractable classes
|
|
44
|
+
const { trueDuplicates, extractableClasses } = this.findDuplicateClasses(classNames);
|
|
45
|
+
// Repeated classes
|
|
46
|
+
if (this.configService.isRepeatedClassesEnabled()) {
|
|
47
|
+
const severity = this.configService.getRepeatedClassesSeverity();
|
|
48
|
+
if (severity !== 'off') {
|
|
49
|
+
if (trueDuplicates.length > 0) {
|
|
50
|
+
diagnostics.push(...this.diagnosticService.createDuplicateDiagnostics(trueDuplicates, sourceFile, severity));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
53
|
}
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
// Extractable classes (always enabled when lint is enabled, no config option)
|
|
55
|
+
if (extractableClasses.length > 0) {
|
|
56
|
+
diagnostics.push(...this.diagnosticService.createExtractableClassDiagnostics(extractableClasses, sourceFile));
|
|
57
|
+
}
|
|
58
|
+
// Conflicting classes
|
|
59
|
+
if (this.configService.isConflictingClassesEnabled()) {
|
|
60
|
+
const severity = this.configService.getConflictingClassesSeverity();
|
|
61
|
+
if (severity !== 'off') {
|
|
62
|
+
const conflicts = this.conflictDetector.findConflicts(classNames);
|
|
63
|
+
if (conflicts.length > 0) {
|
|
64
|
+
diagnostics.push(...this.diagnosticService.createConflictDiagnostics(conflicts, sourceFile, severity));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
56
67
|
}
|
|
57
|
-
}
|
|
58
|
-
const diagnostics = [];
|
|
59
|
-
if (invalidClasses.length > 0) {
|
|
60
|
-
diagnostics.push(...this.diagnosticService.createDiagnostics(invalidClasses, sourceFile));
|
|
61
|
-
}
|
|
62
|
-
if (trueDuplicates.length > 0) {
|
|
63
|
-
diagnostics.push(...this.diagnosticService.createDuplicateDiagnostics(trueDuplicates, sourceFile));
|
|
64
|
-
}
|
|
65
|
-
if (extractableClasses.length > 0) {
|
|
66
|
-
diagnostics.push(...this.diagnosticService.createExtractableClassDiagnostics(extractableClasses, sourceFile));
|
|
67
|
-
}
|
|
68
|
-
if (conflicts.length > 0) {
|
|
69
|
-
diagnostics.push(...this.diagnosticService.createConflictDiagnostics(conflicts, sourceFile));
|
|
70
68
|
}
|
|
71
69
|
return diagnostics;
|
|
72
70
|
}
|
|
@@ -75,12 +73,11 @@ class ValidationService {
|
|
|
75
73
|
* PERFORMANCE OPTIMIZED: No logging in hot path
|
|
76
74
|
*/
|
|
77
75
|
filterInvalidClasses(classNames) {
|
|
78
|
-
// PERFORMANCE: Skip logging each class validation (hot path)
|
|
79
|
-
// This method is called for every class in every file
|
|
80
76
|
return classNames.filter(classInfo => !this.validator.isValidClass(classInfo.className));
|
|
81
77
|
}
|
|
82
78
|
/**
|
|
83
|
-
*
|
|
79
|
+
* Find duplicate and extractable classes within the same attribute
|
|
80
|
+
* Returns true duplicates and extractable classes (same class in both ternary branches)
|
|
84
81
|
*/
|
|
85
82
|
findDuplicateClasses(classNames) {
|
|
86
83
|
const trueDuplicates = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidationService.js","sourceRoot":"","sources":["../../src/services/ValidationService.ts"],"names":[],"mappings":";;;AAIA,yFAAoG;AAKpG;;;GAGG;AACH,MAAa,iBAAiB;IAG7B,YACkB,iBAA6C,EAC7C,iBAAoC,EACpC,SAA8B,EAC9B,
|
|
1
|
+
{"version":3,"file":"ValidationService.js","sourceRoot":"","sources":["../../src/services/ValidationService.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tailwind-typescript-plugin",
|
|
3
|
-
"version": "1.4.1-beta.
|
|
3
|
+
"version": "1.4.1-beta.13",
|
|
4
4
|
"description": "TypeScript Language Service plugin that validates Tailwind CSS class names in JSX/TSX files. Catches typos and invalid classes in real-time with support for tailwind-variants and class-variance-authority.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|