tailwind-typescript-plugin 1.4.0-beta.16 → 1.4.0-beta.18
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 +87 -2
- package/lib/core/interfaces.d.ts +7 -1
- package/lib/core/interfaces.d.ts.map +1 -1
- package/lib/core/types.d.ts +12 -0
- package/lib/core/types.d.ts.map +1 -1
- package/lib/extractors/JsxAttributeExtractor.d.ts.map +1 -1
- package/lib/extractors/JsxAttributeExtractor.js +4 -3
- package/lib/extractors/JsxAttributeExtractor.js.map +1 -1
- package/lib/extractors/VueAttributeExtractor.d.ts +21 -6
- package/lib/extractors/VueAttributeExtractor.d.ts.map +1 -1
- package/lib/extractors/VueAttributeExtractor.js +194 -11
- package/lib/extractors/VueAttributeExtractor.js.map +1 -1
- package/lib/services/ClassNameExtractionService.d.ts +1 -1
- package/lib/services/ClassNameExtractionService.d.ts.map +1 -1
- package/lib/services/ClassNameExtractionService.js +3 -2
- package/lib/services/ClassNameExtractionService.js.map +1 -1
- package/lib/services/ClassNameExtractionService.spec.js +62 -0
- package/lib/services/ClassNameExtractionService.spec.js.map +1 -1
- package/lib/services/PluginConfigService.d.ts +8 -0
- package/lib/services/PluginConfigService.d.ts.map +1 -1
- package/lib/services/PluginConfigService.js +21 -0
- package/lib/services/PluginConfigService.js.map +1 -1
- package/lib/services/PluginConfigService.spec.d.ts +2 -0
- package/lib/services/PluginConfigService.spec.d.ts.map +1 -0
- package/lib/services/PluginConfigService.spec.js +93 -0
- package/lib/services/PluginConfigService.spec.js.map +1 -0
- package/lib/services/ValidationService.d.ts.map +1 -1
- package/lib/services/ValidationService.js +1 -1
- package/lib/services/ValidationService.js.map +1 -1
- package/lib/utils/FrameworkDetector.js +4 -4
- package/lib/utils/FrameworkDetector.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [1.4.0-beta.18](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/compare/v1.4.0-beta.17...v1.4.0-beta.18) (2025-12-20)
|
|
2
|
+
|
|
3
|
+
### ✨ Features
|
|
4
|
+
|
|
5
|
+
* add Vue Single File Component support ([1d99210](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/commit/1d99210ce1d4b206fcf4461a904af7adee24ab53))
|
|
6
|
+
|
|
7
|
+
## [1.4.0-beta.17](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/compare/v1.4.0-beta.16...v1.4.0-beta.17) (2025-12-20)
|
|
8
|
+
|
|
9
|
+
### ✨ Features
|
|
10
|
+
|
|
11
|
+
* add configurable class attributes for custom JSX props ([701b133](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/commit/701b13369f943893f2cdf054b4a1c9a80640398e))
|
|
12
|
+
|
|
1
13
|
## [1.4.0-beta.16](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/compare/v1.4.0-beta.15...v1.4.0-beta.16) (2025-12-03)
|
|
2
14
|
|
|
3
15
|
### ✨ Features
|
package/README.md
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](https://github.com/IvanRodriCalleja/tailwind-typescript-plugin/blob/main/CONTRIBUTING.md)
|
|
8
8
|
|
|
9
|
-
A TypeScript Language Service plugin that catches **typos and invalid Tailwind CSS class names** in your JSX/TSX files. When you write a class name that doesn't exist in Tailwind, it won't apply any styles—this plugin detects those mistakes and shows errors directly in your editor before you ship broken styles.
|
|
9
|
+
A TypeScript Language Service plugin that catches **typos and invalid Tailwind CSS class names** in your JSX/TSX and Vue files. When you write a class name that doesn't exist in Tailwind, it won't apply any styles—this plugin detects those mistakes and shows errors directly in your editor before you ship broken styles.
|
|
10
10
|
|
|
11
11
|
## What does this plugin do?
|
|
12
12
|
|
|
13
|
-
Ever written `className="flex itms-center"` instead of `"flex items-center"`? That typo silently fails—Tailwind ignores invalid classes and your component looks broken. This plugin prevents that by analyzing your JSX/TSX code
|
|
13
|
+
Ever written `className="flex itms-center"` instead of `"flex items-center"`? That typo silently fails—Tailwind ignores invalid classes and your component looks broken. This plugin prevents that by analyzing your JSX/TSX and Vue code, validating that all Tailwind classes used in `className`/`class` attributes actually exist in your Tailwind CSS configuration. It provides real-time feedback by showing TypeScript errors for invalid or misspelled Tailwind classes, catching styling mistakes before they reach production.
|
|
14
14
|
|
|
15
15
|
## Table of Contents
|
|
16
16
|
|
|
@@ -37,6 +37,10 @@ Ever written `className="flex itms-center"` instead of `"flex items-center"`? Th
|
|
|
37
37
|
- **Editor integration**: Works with any editor that supports TypeScript Language Service (VS Code, WebStorm, etc.)
|
|
38
38
|
- **Supports Tailwind variants**: Validates responsive (`md:`, `lg:`), state (`hover:`, `focus:`), and other variants
|
|
39
39
|
- **Arbitrary values**: Correctly handles Tailwind arbitrary values like `h-[50vh]` or `bg-[#ff0000]`
|
|
40
|
+
- **Vue support**: Validates classes in Vue Single File Components (`.vue` files) when used with `@vue/typescript-plugin`
|
|
41
|
+
- Static class attributes: `<div class="flex items-center">`
|
|
42
|
+
- Dynamic class bindings: `<div :class="{ 'bg-red-500': isActive }">`
|
|
43
|
+
- Object and array syntax support
|
|
40
44
|
- **Variant library support**:
|
|
41
45
|
- **tailwind-variants**: Validates classes in `tv()` function calls including `base`, `variants`, `compoundVariants`, `slots`, and `class`/`className` override properties
|
|
42
46
|
- **class-variance-authority**: Validates classes in `cva()` function calls including base classes, `variants`, `compoundVariants`, and `class`/`className` override properties
|
|
@@ -116,6 +120,9 @@ Add the plugin to the `compilerOptions.plugins` array in your `tsconfig.json`:
|
|
|
116
120
|
"hover": {
|
|
117
121
|
"enabled": true
|
|
118
122
|
}
|
|
123
|
+
},
|
|
124
|
+
"classAttributes": {
|
|
125
|
+
"attributes": ["colorStyles", "textStyles"]
|
|
119
126
|
}
|
|
120
127
|
}
|
|
121
128
|
]
|
|
@@ -292,6 +299,41 @@ Configure editor features like autocomplete and hover.
|
|
|
292
299
|
|
|
293
300
|
---
|
|
294
301
|
|
|
302
|
+
#### `classAttributes` (optional)
|
|
303
|
+
Configure which JSX/HTML attributes should be treated as class attributes.
|
|
304
|
+
|
|
305
|
+
By default, the plugin validates classes in `className`, `class`, and `classList` attributes. You can add additional attributes for frameworks like React Native that use different prop names for styling.
|
|
306
|
+
|
|
307
|
+
| Option | Default | Description |
|
|
308
|
+
|--------|---------|-------------|
|
|
309
|
+
| `attributes` | `[]` | Additional attribute names to treat as class attributes |
|
|
310
|
+
|
|
311
|
+
**Default attributes** (always included):
|
|
312
|
+
- `className` (React, JSX)
|
|
313
|
+
- `class` (HTML, Web Components)
|
|
314
|
+
- `classList` (Solid.js)
|
|
315
|
+
|
|
316
|
+
**Example - Add React Native style attributes**:
|
|
317
|
+
```json
|
|
318
|
+
{
|
|
319
|
+
"classAttributes": {
|
|
320
|
+
"attributes": ["colorStyles", "textStyles", "containerStyles"]
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Usage example**:
|
|
326
|
+
```tsx
|
|
327
|
+
// ✅ All of these will be validated:
|
|
328
|
+
<div className="flex items-center">...</div>
|
|
329
|
+
<div class="flex items-center">...</div>
|
|
330
|
+
<div classList={{ flex: true }}>...</div>
|
|
331
|
+
<View colorStyles="bg-blue-500 text-white">...</View>
|
|
332
|
+
<Text textStyles="font-bold text-lg">...</Text>
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
295
337
|
### Backwards Compatibility
|
|
296
338
|
|
|
297
339
|
The following deprecated options are still supported but will be removed in a future version:
|
|
@@ -334,6 +376,49 @@ You may need to restart the TypeScript server:
|
|
|
334
376
|
- Open command palette
|
|
335
377
|
- Type "TypeScript: Restart TS Server"
|
|
336
378
|
|
|
379
|
+
#### Vue Projects
|
|
380
|
+
|
|
381
|
+
For Vue Single File Components (`.vue` files), you need to configure `@vue/typescript-plugin` alongside this plugin:
|
|
382
|
+
|
|
383
|
+
1. Install the Vue TypeScript plugin:
|
|
384
|
+
```bash
|
|
385
|
+
npm install -D @vue/typescript-plugin
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
2. Configure both plugins in your `tsconfig.json`:
|
|
389
|
+
```json
|
|
390
|
+
{
|
|
391
|
+
"compilerOptions": {
|
|
392
|
+
"plugins": [
|
|
393
|
+
{
|
|
394
|
+
"name": "@vue/typescript-plugin",
|
|
395
|
+
"languages": ["vue"]
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"name": "tailwind-typescript-plugin",
|
|
399
|
+
"globalCss": "./src/global.css"
|
|
400
|
+
}
|
|
401
|
+
]
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
3. Ensure you have the [Vue - Official](https://marketplace.visualstudio.com/items?itemName=Vue.volar) extension installed in VS Code.
|
|
407
|
+
|
|
408
|
+
The plugin will then validate classes in your Vue templates:
|
|
409
|
+
```vue
|
|
410
|
+
<template>
|
|
411
|
+
<!-- ✅ Valid classes -->
|
|
412
|
+
<div class="flex items-center">Valid</div>
|
|
413
|
+
|
|
414
|
+
<!-- ❌ Invalid class detected -->
|
|
415
|
+
<div class="invalidclass">Error shown</div>
|
|
416
|
+
|
|
417
|
+
<!-- ✅ Dynamic class bindings -->
|
|
418
|
+
<div :class="{ 'bg-red-500': isActive }">Dynamic</div>
|
|
419
|
+
</template>
|
|
420
|
+
```
|
|
421
|
+
|
|
337
422
|
#### Other Editors
|
|
338
423
|
|
|
339
424
|
Most editors that support TypeScript Language Service plugins should work automatically. Refer to your editor's documentation for TypeScript plugin configuration.
|
package/lib/core/interfaces.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as ts from 'typescript/lib/tsserverlibrary';
|
|
2
|
-
import { ClassNameInfo, EditorConfig, ExtractionContext, LibrariesConfig, LintConfig, ValidationConfig } from './types';
|
|
2
|
+
import { ClassAttributesConfig, ClassNameInfo, EditorConfig, ExtractionContext, LibrariesConfig, LintConfig, ValidationConfig } from './types';
|
|
3
3
|
/**
|
|
4
4
|
* Base interface for class name extractors
|
|
5
5
|
* Follows the Strategy pattern for extensibility
|
|
@@ -43,6 +43,12 @@ export interface IPluginConfig {
|
|
|
43
43
|
* Editor features configuration (autocomplete and hover)
|
|
44
44
|
*/
|
|
45
45
|
editor?: EditorConfig;
|
|
46
|
+
/**
|
|
47
|
+
* Additional attribute names to treat as class attributes
|
|
48
|
+
* These are merged with defaults (className, class, classList)
|
|
49
|
+
* Example: ["containerStyles", "textStyles"]
|
|
50
|
+
*/
|
|
51
|
+
classAttributes?: ClassAttributesConfig;
|
|
46
52
|
}
|
|
47
53
|
/**
|
|
48
54
|
* Interface for diagnostic creation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/core/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EACN,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAE9D;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,aAAa,EAAE,CAAC;CACpE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,aAAa,IAAI,OAAO,CAAC;IACzB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAE5B;;OAEG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/core/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EACN,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAE9D;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,aAAa,EAAE,CAAC;CACpE;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,aAAa,IAAI,OAAO,CAAC;IACzB,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAE5B;;OAEG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;CACrF"}
|
package/lib/core/types.d.ts
CHANGED
|
@@ -93,6 +93,13 @@ export interface EditorConfig {
|
|
|
93
93
|
autocomplete?: AutocompleteConfig;
|
|
94
94
|
hover?: HoverConfig;
|
|
95
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Configuration for class attributes
|
|
98
|
+
* Additional attribute names that should be treated as class attributes
|
|
99
|
+
* These will be merged with the default attributes (className, class, classList)
|
|
100
|
+
* Example: ['colorStyles', 'textStyles'] for React Native
|
|
101
|
+
*/
|
|
102
|
+
export type ClassAttributesConfig = string[];
|
|
96
103
|
/**
|
|
97
104
|
* Represents information about a class name found in source code
|
|
98
105
|
*/
|
|
@@ -146,6 +153,11 @@ export interface ExtractionContext {
|
|
|
146
153
|
* Used to determine which extractor to use
|
|
147
154
|
*/
|
|
148
155
|
readonly framework?: Framework;
|
|
156
|
+
/**
|
|
157
|
+
* Array of attribute names that should be treated as class attributes
|
|
158
|
+
* Includes default attributes (className, class, classList) plus user-configured ones
|
|
159
|
+
*/
|
|
160
|
+
readonly classAttributes?: string[];
|
|
149
161
|
}
|
|
150
162
|
/**
|
|
151
163
|
* Result of extraction operation
|
package/lib/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,qBAAqB,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,KAAK,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC7B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,cAAc,CAAC;IACpC,eAAe,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,aAAa,CAAC,EAAE;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsxAttributeExtractor.d.ts","sourceRoot":"","sources":["../../src/extractors/JsxAttributeExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;IACvD,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,iBAAiB,CAA8B;;IASvD,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAO7D,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,aAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"JsxAttributeExtractor.d.ts","sourceRoot":"","sources":["../../src/extractors/JsxAttributeExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;IACvD,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,iBAAiB,CAA8B;;IASvD,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAO7D,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,aAAa,EAAE;CAmInE"}
|
|
@@ -37,15 +37,16 @@ class JsxAttributeExtractor extends BaseExtractor_1.BaseExtractor {
|
|
|
37
37
|
if (attributes.length === 0) {
|
|
38
38
|
return classNames;
|
|
39
39
|
}
|
|
40
|
+
// Get configured class attributes (defaults to ['className', 'class', 'classList'] if not provided)
|
|
41
|
+
const classAttributes = context.classAttributes || ['className', 'class', 'classList'];
|
|
40
42
|
// Process attributes
|
|
41
43
|
for (const attr of attributes) {
|
|
42
|
-
// OPTIMIZATION: Check
|
|
44
|
+
// OPTIMIZATION: Check if this is a JSX attribute and if it's a class attribute
|
|
43
45
|
if (!context.typescript.isJsxAttribute(attr)) {
|
|
44
46
|
continue;
|
|
45
47
|
}
|
|
46
|
-
// Support both className (React) and class (Solid, standard JSX)
|
|
47
48
|
const attrName = attr.name.getText();
|
|
48
|
-
if (attrName
|
|
49
|
+
if (!classAttributes.includes(attrName)) {
|
|
49
50
|
continue;
|
|
50
51
|
}
|
|
51
52
|
const initializer = attr.initializer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsxAttributeExtractor.js","sourceRoot":"","sources":["../../src/extractors/JsxAttributeExtractor.ts"],"names":[],"mappings":";;;AAGA,mDAAgD;AAChD,+DAA4D;AAC5D,+EAA4E;AAE5E;;;;;;;;;GASG;AACH,MAAa,qBAAsB,SAAQ,6BAAa;IAIvD;QACC,KAAK,EAAE,CAAC;QACR,iDAAiD;QACjD,IAAI,CAAC,mBAAmB,GAAG,IAAI,yCAAmB,EAAE,CAAC;QACrD,IAAI,CAAC,iBAAiB,GAAG,IAAI,yDAA2B,EAAE,CAAC;IAC5D,CAAC;IAED,SAAS,CAAC,IAAa,EAAE,OAA0B;QAClD,OAAO,CACN,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC5C,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAChD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAa,EAAE,OAA0B;QAChD,MAAM,UAAU,GAAoB,EAAE,CAAC;QAEvC,+DAA+D;QAC/D,IACC,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC7C,CAAC,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAChD,CAAC;YACF,OAAO,UAAU,CAAC;QACnB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAE9C,4CAA4C;QAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,UAAU,CAAC;QACnB,CAAC;QAED,qBAAqB;QACrB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC/B
|
|
1
|
+
{"version":3,"file":"JsxAttributeExtractor.js","sourceRoot":"","sources":["../../src/extractors/JsxAttributeExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,16 +3,31 @@ import { ClassNameInfo, ExtractionContext } from '../core/types';
|
|
|
3
3
|
import { BaseExtractor } from './BaseExtractor';
|
|
4
4
|
/**
|
|
5
5
|
* Extracts class names from Vue template class attributes
|
|
6
|
-
* Assumes @vue/language-tools is configured and transforms Vue templates
|
|
7
6
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
7
|
+
* When @vue/language-tools (Volar) transforms Vue SFC templates, it generates
|
|
8
|
+
* TypeScript code using function calls with object spreads:
|
|
9
|
+
*
|
|
10
|
+
* ```typescript
|
|
11
|
+
* __VLS_asFunctionalElement(__VLS_intrinsicElements.div)({
|
|
12
|
+
* ...{ class: "flex items-center" },
|
|
13
|
+
* });
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* For dynamic classes:
|
|
17
|
+
* ```typescript
|
|
18
|
+
* __VLS_asFunctionalElement(__VLS_intrinsicElements.div)({
|
|
19
|
+
* ...{ class: ({ 'bg-red-500': isActive }) },
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* This extractor handles these patterns to extract class names.
|
|
13
24
|
*/
|
|
14
25
|
export declare class VueAttributeExtractor extends BaseExtractor {
|
|
26
|
+
private expressionExtractor;
|
|
27
|
+
constructor();
|
|
15
28
|
canHandle(node: ts.Node, context: ExtractionContext): boolean;
|
|
29
|
+
private hasClassSpreadProperty;
|
|
16
30
|
extract(node: ts.Node, context: ExtractionContext): ClassNameInfo[];
|
|
31
|
+
private extractClassesFromValue;
|
|
17
32
|
}
|
|
18
33
|
//# sourceMappingURL=VueAttributeExtractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VueAttributeExtractor.d.ts","sourceRoot":"","sources":["../../src/extractors/VueAttributeExtractor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VueAttributeExtractor.d.ts","sourceRoot":"","sources":["../../src/extractors/VueAttributeExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;IACvD,OAAO,CAAC,mBAAmB,CAAsB;;IAOjD,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO;IA4B7D,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,aAAa,EAAE;IA4CnE,OAAO,CAAC,uBAAuB;CA2H/B"}
|
|
@@ -2,26 +2,209 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VueAttributeExtractor = void 0;
|
|
4
4
|
const BaseExtractor_1 = require("./BaseExtractor");
|
|
5
|
+
const ExpressionExtractor_1 = require("./ExpressionExtractor");
|
|
5
6
|
/**
|
|
6
7
|
* Extracts class names from Vue template class attributes
|
|
7
|
-
* Assumes @vue/language-tools is configured and transforms Vue templates
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
9
|
+
* When @vue/language-tools (Volar) transforms Vue SFC templates, it generates
|
|
10
|
+
* TypeScript code using function calls with object spreads:
|
|
11
|
+
*
|
|
12
|
+
* ```typescript
|
|
13
|
+
* __VLS_asFunctionalElement(__VLS_intrinsicElements.div)({
|
|
14
|
+
* ...{ class: "flex items-center" },
|
|
15
|
+
* });
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* For dynamic classes:
|
|
19
|
+
* ```typescript
|
|
20
|
+
* __VLS_asFunctionalElement(__VLS_intrinsicElements.div)({
|
|
21
|
+
* ...{ class: ({ 'bg-red-500': isActive }) },
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* This extractor handles these patterns to extract class names.
|
|
14
26
|
*/
|
|
15
27
|
class VueAttributeExtractor extends BaseExtractor_1.BaseExtractor {
|
|
28
|
+
constructor() {
|
|
29
|
+
super();
|
|
30
|
+
this.expressionExtractor = new ExpressionExtractor_1.ExpressionExtractor();
|
|
31
|
+
}
|
|
16
32
|
canHandle(node, context) {
|
|
17
|
-
//
|
|
18
|
-
//
|
|
33
|
+
// We handle call expressions that look like Vue's generated element calls
|
|
34
|
+
// Pattern: __VLS_asFunctionalElement(...)({ ...{ class: ... } })
|
|
35
|
+
if (!context.typescript.isCallExpression(node)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
// Check if this is a chained call (the outer call to the element function)
|
|
39
|
+
// The pattern is: func(...)({...}) where the result of func(...) is called again
|
|
40
|
+
const expression = node.expression;
|
|
41
|
+
if (!context.typescript.isCallExpression(expression)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
// Check if the arguments contain an object with spread that has a 'class' property
|
|
45
|
+
if (node.arguments.length === 0) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
const firstArg = node.arguments[0];
|
|
49
|
+
if (!context.typescript.isObjectLiteralExpression(firstArg)) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
// Look for spread assignments with 'class' property
|
|
53
|
+
return this.hasClassSpreadProperty(firstArg, context);
|
|
54
|
+
}
|
|
55
|
+
hasClassSpreadProperty(obj, context) {
|
|
56
|
+
for (const prop of obj.properties) {
|
|
57
|
+
if (context.typescript.isSpreadAssignment(prop)) {
|
|
58
|
+
const spreadExpr = prop.expression;
|
|
59
|
+
if (context.typescript.isObjectLiteralExpression(spreadExpr)) {
|
|
60
|
+
for (const innerProp of spreadExpr.properties) {
|
|
61
|
+
if (context.typescript.isPropertyAssignment(innerProp)) {
|
|
62
|
+
const name = innerProp.name;
|
|
63
|
+
if (context.typescript.isIdentifier(name) && name.text === 'class') {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
19
71
|
return false;
|
|
20
72
|
}
|
|
21
73
|
extract(node, context) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
74
|
+
const classNames = [];
|
|
75
|
+
if (!context.typescript.isCallExpression(node)) {
|
|
76
|
+
return classNames;
|
|
77
|
+
}
|
|
78
|
+
const firstArg = node.arguments[0];
|
|
79
|
+
if (!firstArg || !context.typescript.isObjectLiteralExpression(firstArg)) {
|
|
80
|
+
return classNames;
|
|
81
|
+
}
|
|
82
|
+
// Find spread assignments with 'class' property
|
|
83
|
+
for (const prop of firstArg.properties) {
|
|
84
|
+
if (!context.typescript.isSpreadAssignment(prop)) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const spreadExpr = prop.expression;
|
|
88
|
+
if (!context.typescript.isObjectLiteralExpression(spreadExpr)) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
for (const innerProp of spreadExpr.properties) {
|
|
92
|
+
if (!context.typescript.isPropertyAssignment(innerProp)) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const name = innerProp.name;
|
|
96
|
+
if (!context.typescript.isIdentifier(name) || name.text !== 'class') {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const value = innerProp.initializer;
|
|
100
|
+
const attributeId = `${innerProp.getStart()}-${innerProp.getEnd()}`;
|
|
101
|
+
// Handle different class value types
|
|
102
|
+
classNames.push(...this.extractClassesFromValue(value, context, attributeId));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return classNames;
|
|
106
|
+
}
|
|
107
|
+
extractClassesFromValue(value, context, attributeId) {
|
|
108
|
+
const classNames = [];
|
|
109
|
+
// Static string literal: class: "flex items-center"
|
|
110
|
+
if (context.typescript.isStringLiteral(value)) {
|
|
111
|
+
const fullText = value.text;
|
|
112
|
+
if (fullText.length === 0) {
|
|
113
|
+
return classNames;
|
|
114
|
+
}
|
|
115
|
+
const stringContentStart = value.getStart() + 1;
|
|
116
|
+
let offset = 0;
|
|
117
|
+
const parts = fullText.split(/(\s+)/);
|
|
118
|
+
for (const part of parts) {
|
|
119
|
+
if (part && !/^\s+$/.test(part)) {
|
|
120
|
+
classNames.push({
|
|
121
|
+
className: part,
|
|
122
|
+
absoluteStart: stringContentStart + offset,
|
|
123
|
+
length: part.length,
|
|
124
|
+
line: context.sourceFile.getLineAndCharacterOfPosition(stringContentStart + offset).line +
|
|
125
|
+
1,
|
|
126
|
+
file: context.sourceFile.fileName,
|
|
127
|
+
attributeId
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
offset += part.length;
|
|
131
|
+
}
|
|
132
|
+
return classNames;
|
|
133
|
+
}
|
|
134
|
+
// Object literal for dynamic classes: class: { 'bg-red-500': isActive }
|
|
135
|
+
// Or wrapped in parentheses: class: ({ 'bg-red-500': isActive })
|
|
136
|
+
let objectExpr;
|
|
137
|
+
if (context.typescript.isObjectLiteralExpression(value)) {
|
|
138
|
+
objectExpr = value;
|
|
139
|
+
}
|
|
140
|
+
else if (context.typescript.isParenthesizedExpression(value)) {
|
|
141
|
+
const inner = value.expression;
|
|
142
|
+
if (context.typescript.isObjectLiteralExpression(inner)) {
|
|
143
|
+
objectExpr = inner;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (objectExpr) {
|
|
147
|
+
for (const prop of objectExpr.properties) {
|
|
148
|
+
if (context.typescript.isPropertyAssignment(prop)) {
|
|
149
|
+
const propName = prop.name;
|
|
150
|
+
let className;
|
|
151
|
+
let start;
|
|
152
|
+
// Handle string literal keys: { 'bg-red-500': true }
|
|
153
|
+
if (context.typescript.isStringLiteral(propName)) {
|
|
154
|
+
className = propName.text;
|
|
155
|
+
start = propName.getStart() + 1; // Skip opening quote
|
|
156
|
+
}
|
|
157
|
+
// Handle identifier keys: { flex: true }
|
|
158
|
+
else if (context.typescript.isIdentifier(propName)) {
|
|
159
|
+
className = propName.text;
|
|
160
|
+
start = propName.getStart();
|
|
161
|
+
}
|
|
162
|
+
if (className && start !== undefined) {
|
|
163
|
+
classNames.push({
|
|
164
|
+
className,
|
|
165
|
+
absoluteStart: start,
|
|
166
|
+
length: className.length,
|
|
167
|
+
line: context.sourceFile.getLineAndCharacterOfPosition(start).line + 1,
|
|
168
|
+
file: context.sourceFile.fileName,
|
|
169
|
+
attributeId
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Handle shorthand properties: { flex }
|
|
174
|
+
else if (context.typescript.isShorthandPropertyAssignment(prop)) {
|
|
175
|
+
const className = prop.name.text;
|
|
176
|
+
const start = prop.name.getStart();
|
|
177
|
+
classNames.push({
|
|
178
|
+
className,
|
|
179
|
+
absoluteStart: start,
|
|
180
|
+
length: className.length,
|
|
181
|
+
line: context.sourceFile.getLineAndCharacterOfPosition(start).line + 1,
|
|
182
|
+
file: context.sourceFile.fileName,
|
|
183
|
+
attributeId
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return classNames;
|
|
188
|
+
}
|
|
189
|
+
// Array literal: class: ['flex', 'items-center']
|
|
190
|
+
if (context.typescript.isArrayLiteralExpression(value)) {
|
|
191
|
+
const addAttributeId = (classes) => classes.map(c => ({ ...c, attributeId }));
|
|
192
|
+
return addAttributeId(this.expressionExtractor.extract(value, context));
|
|
193
|
+
}
|
|
194
|
+
// Template literal or other expressions - delegate to expression extractor
|
|
195
|
+
if (context.typescript.isTemplateExpression(value) ||
|
|
196
|
+
context.typescript.isNoSubstitutionTemplateLiteral(value)) {
|
|
197
|
+
const addAttributeId = (classes) => classes.map(c => ({ ...c, attributeId }));
|
|
198
|
+
return addAttributeId(this.expressionExtractor.extract(value, context));
|
|
199
|
+
}
|
|
200
|
+
// Call expression (utility functions like cn, clsx)
|
|
201
|
+
if (context.typescript.isCallExpression(value)) {
|
|
202
|
+
if (this.shouldValidateFunctionCall(value, context.utilityFunctions, context)) {
|
|
203
|
+
const addAttributeId = (classes) => classes.map(c => ({ ...c, attributeId }));
|
|
204
|
+
return addAttributeId(this.expressionExtractor.extract(value, context));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return classNames;
|
|
25
208
|
}
|
|
26
209
|
}
|
|
27
210
|
exports.VueAttributeExtractor = VueAttributeExtractor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VueAttributeExtractor.js","sourceRoot":"","sources":["../../src/extractors/VueAttributeExtractor.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"VueAttributeExtractor.js","sourceRoot":"","sources":["../../src/extractors/VueAttributeExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ export declare class ClassNameExtractionService {
|
|
|
39
39
|
/**
|
|
40
40
|
* Extract all class names from a source file (OPTIMIZED)
|
|
41
41
|
*/
|
|
42
|
-
extractFromSourceFile(typescript: typeof ts, sourceFile: ts.SourceFile, utilityFunctions: UtilityFunction[], typeChecker?: ts.TypeChecker): ClassNameInfo[];
|
|
42
|
+
extractFromSourceFile(typescript: typeof ts, sourceFile: ts.SourceFile, utilityFunctions: UtilityFunction[], typeChecker?: ts.TypeChecker, classAttributes?: string[]): ClassNameInfo[];
|
|
43
43
|
/**
|
|
44
44
|
* Add a custom extractor (for extensibility)
|
|
45
45
|
* Note: This is kept for API compatibility but not used in optimized path
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassNameExtractionService.d.ts","sourceRoot":"","sources":["../../src/services/ClassNameExtractionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAqB,eAAe,EAAE,MAAM,eAAe,CAAC;AAQlF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,0BAA0B;IASrC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,4BAA4B;IAR9C,OAAO,CAAC,mBAAmB,CAA6C;IAGxE,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,YAAY,CAAsB;gBAGxB,sBAAsB,GAAE,OAAc,EACtC,4BAA4B,GAAE,OAAc;IAQ9D;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAahC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,qBAAqB,CACpB,UAAU,EAAE,OAAO,EAAE,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,gBAAgB,EAAE,eAAe,EAAE,EACnC,WAAW,CAAC,EAAE,EAAE,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"ClassNameExtractionService.d.ts","sourceRoot":"","sources":["../../src/services/ClassNameExtractionService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAqB,eAAe,EAAE,MAAM,eAAe,CAAC;AAQlF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,0BAA0B;IASrC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,4BAA4B;IAR9C,OAAO,CAAC,mBAAmB,CAA6C;IAGxE,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,YAAY,CAAsB;gBAGxB,sBAAsB,GAAE,OAAc,EACtC,4BAA4B,GAAE,OAAc;IAQ9D;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAahC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,qBAAqB,CACpB,UAAU,EAAE,OAAO,EAAE,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,gBAAgB,EAAE,eAAe,EAAE,EACnC,WAAW,CAAC,EAAE,EAAE,CAAC,WAAW,EAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,GACxB,aAAa,EAAE;IA8ElB;;;OAGG;IAEH,YAAY,CAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI;IAMnD;;OAEG;IACH,WAAW,IAAI,IAAI;CAQnB"}
|
|
@@ -65,7 +65,7 @@ class ClassNameExtractionService {
|
|
|
65
65
|
/**
|
|
66
66
|
* Extract all class names from a source file (OPTIMIZED)
|
|
67
67
|
*/
|
|
68
|
-
extractFromSourceFile(typescript, sourceFile, utilityFunctions, typeChecker) {
|
|
68
|
+
extractFromSourceFile(typescript, sourceFile, utilityFunctions, typeChecker, classAttributes) {
|
|
69
69
|
const classNames = [];
|
|
70
70
|
// Detect framework from filename
|
|
71
71
|
const framework = (0, FrameworkDetector_1.detectFramework)(sourceFile.fileName);
|
|
@@ -78,7 +78,8 @@ class ClassNameExtractionService {
|
|
|
78
78
|
sourceFile,
|
|
79
79
|
utilityFunctions,
|
|
80
80
|
typeChecker,
|
|
81
|
-
framework
|
|
81
|
+
framework,
|
|
82
|
+
classAttributes
|
|
82
83
|
};
|
|
83
84
|
// Get the appropriate extractor for this framework (lazy-loaded)
|
|
84
85
|
const frameworkExtractor = this.getFrameworkExtractor(framework);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassNameExtractionService.js","sourceRoot":"","sources":["../../src/services/ClassNameExtractionService.ts"],"names":[],"mappings":";;;AAIA,6DAA0D;AAC1D,+EAA4E;AAC5E,qFAAkF;AAClF,uFAAoF;AACpF,+EAA4E;AAC5E,kEAAwE;AAExE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAa,0BAA0B;IAQtC,YACkB,yBAAkC,IAAI,EACtC,+BAAwC,IAAI;QAD5C,2BAAsB,GAAtB,sBAAsB,CAAgB;QACtC,iCAA4B,GAA5B,4BAA4B,CAAgB;QAT9D,uDAAuD;QAC/C,wBAAmB,GAAG,IAAI,GAAG,EAAkC,CAAC;QAUvE,mEAAmE;QACnE,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,qDAAyB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnF,IAAI,CAAC,YAAY,GAAG,4BAA4B,CAAC,CAAC,CAAC,IAAI,2BAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7E,kFAAkF;IACnF,CAAC;IAED;;;OAGG;IACK,wBAAwB,CAAC,SAAoB;QACpD,QAAQ,SAAS,EAAE,CAAC;YACnB,KAAK,6BAAS,CAAC,GAAG;gBACjB,OAAO,IAAI,6CAAqB,EAAE,CAAC;YACpC,KAAK,6BAAS,CAAC,GAAG;gBACjB,OAAO,IAAI,6CAAqB,EAAE,CAAC;YACpC,KAAK,6BAAS,CAAC,MAAM;gBACpB,OAAO,IAAI,mDAAwB,EAAE,CAAC;YACvC;gBACC,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC;IACF,CAAC;IAED;;;OAGG;IACK,qBAAqB,CAAC,SAAoB;QACjD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,qBAAqB,CACpB,UAAqB,EACrB,UAAyB,EACzB,gBAAmC,EACnC,WAA4B;
|
|
1
|
+
{"version":3,"file":"ClassNameExtractionService.js","sourceRoot":"","sources":["../../src/services/ClassNameExtractionService.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,6 +134,68 @@ describe('ClassNameExtractionService', () => {
|
|
|
134
134
|
expect(results[2]).toHaveLength(0);
|
|
135
135
|
});
|
|
136
136
|
});
|
|
137
|
+
describe('Custom class attributes', () => {
|
|
138
|
+
it('should extract classes from default className attribute', () => {
|
|
139
|
+
const sourceCode = '<div className="flex items-center">Hello</div>';
|
|
140
|
+
const sourceFile = ts.createSourceFile('App.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
141
|
+
const classNames = service.extractFromSourceFile(ts, sourceFile, [], undefined, [
|
|
142
|
+
'className',
|
|
143
|
+
'class',
|
|
144
|
+
'classList'
|
|
145
|
+
]);
|
|
146
|
+
expect(classNames).toHaveLength(2);
|
|
147
|
+
expect(classNames[0].className).toBe('flex');
|
|
148
|
+
expect(classNames[1].className).toBe('items-center');
|
|
149
|
+
});
|
|
150
|
+
it('should extract classes from custom attributes when configured', () => {
|
|
151
|
+
const sourceCode = '<View colorStyles="bg-blue-500 text-white">Hello</View>';
|
|
152
|
+
const sourceFile = ts.createSourceFile('App.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
153
|
+
const classNames = service.extractFromSourceFile(ts, sourceFile, [], undefined, [
|
|
154
|
+
'className',
|
|
155
|
+
'class',
|
|
156
|
+
'classList',
|
|
157
|
+
'colorStyles'
|
|
158
|
+
]);
|
|
159
|
+
expect(classNames).toHaveLength(2);
|
|
160
|
+
expect(classNames[0].className).toBe('bg-blue-500');
|
|
161
|
+
expect(classNames[1].className).toBe('text-white');
|
|
162
|
+
});
|
|
163
|
+
it('should extract classes from multiple custom attributes', () => {
|
|
164
|
+
const sourceCode = '<View colorStyles="bg-blue-500" textStyles="font-bold text-lg">Hello</View>';
|
|
165
|
+
const sourceFile = ts.createSourceFile('App.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
166
|
+
const classNames = service.extractFromSourceFile(ts, sourceFile, [], undefined, [
|
|
167
|
+
'className',
|
|
168
|
+
'colorStyles',
|
|
169
|
+
'textStyles'
|
|
170
|
+
]);
|
|
171
|
+
expect(classNames).toHaveLength(3);
|
|
172
|
+
expect(classNames[0].className).toBe('bg-blue-500');
|
|
173
|
+
expect(classNames[1].className).toBe('font-bold');
|
|
174
|
+
expect(classNames[2].className).toBe('text-lg');
|
|
175
|
+
});
|
|
176
|
+
it('should not extract from non-configured attributes', () => {
|
|
177
|
+
const sourceCode = '<View customProp="flex items-center">Hello</View>';
|
|
178
|
+
const sourceFile = ts.createSourceFile('App.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
179
|
+
// Only default attributes configured, customProp not included
|
|
180
|
+
const classNames = service.extractFromSourceFile(ts, sourceFile, [], undefined, [
|
|
181
|
+
'className',
|
|
182
|
+
'class',
|
|
183
|
+
'classList'
|
|
184
|
+
]);
|
|
185
|
+
expect(classNames).toHaveLength(0);
|
|
186
|
+
});
|
|
187
|
+
it('should work with JSX expressions in custom attributes', () => {
|
|
188
|
+
const sourceCode = "<View colorStyles={'bg-blue-500 text-white'}>Hello</View>";
|
|
189
|
+
const sourceFile = ts.createSourceFile('App.tsx', sourceCode, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
190
|
+
const classNames = service.extractFromSourceFile(ts, sourceFile, [], undefined, [
|
|
191
|
+
'className',
|
|
192
|
+
'colorStyles'
|
|
193
|
+
]);
|
|
194
|
+
expect(classNames).toHaveLength(2);
|
|
195
|
+
expect(classNames[0].className).toBe('bg-blue-500');
|
|
196
|
+
expect(classNames[1].className).toBe('text-white');
|
|
197
|
+
});
|
|
198
|
+
});
|
|
137
199
|
describe('Variant extractors', () => {
|
|
138
200
|
it('should work across all frameworks', () => {
|
|
139
201
|
// tv() and cva() should work in any file type
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassNameExtractionService.spec.js","sourceRoot":"","sources":["../../src/services/ClassNameExtractionService.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ClassNameExtractionService.spec.js","sourceRoot":"","sources":["../../src/services/ClassNameExtractionService.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export declare class PluginConfigService {
|
|
|
10
10
|
private validationConfig;
|
|
11
11
|
private lintConfig;
|
|
12
12
|
private editorConfig;
|
|
13
|
+
private classAttributes;
|
|
13
14
|
private cssFilePath?;
|
|
14
15
|
private utilityFunctionsLegacy;
|
|
15
16
|
constructor(config: IPluginConfig);
|
|
@@ -18,6 +19,7 @@ export declare class PluginConfigService {
|
|
|
18
19
|
private initializeValidation;
|
|
19
20
|
private initializeLint;
|
|
20
21
|
private initializeEditor;
|
|
22
|
+
private initializeClassAttributes;
|
|
21
23
|
/**
|
|
22
24
|
* Convert new utilities config to legacy UtilityFunction[] format
|
|
23
25
|
* This is needed for backwards compatibility with extractors
|
|
@@ -47,5 +49,11 @@ export declare class PluginConfigService {
|
|
|
47
49
|
isHoverEnabled(): boolean;
|
|
48
50
|
getCssFilePath(): string | undefined;
|
|
49
51
|
hasValidCssPath(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Get the configured class attributes
|
|
54
|
+
* Returns an array of attribute names that should be treated as class attributes
|
|
55
|
+
* Includes default attributes (className, class, classList) plus user-configured ones
|
|
56
|
+
*/
|
|
57
|
+
getClassAttributes(): string[];
|
|
50
58
|
}
|
|
51
59
|
//# sourceMappingURL=PluginConfigService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginConfigService.d.ts","sourceRoot":"","sources":["../../src/services/PluginConfigService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACN,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"PluginConfigService.d.ts","sourceRoot":"","sources":["../../src/services/PluginConfigService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACN,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,MAAM,eAAe,CAAC;AAuDvB;;;GAGG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,gBAAgB,CAEtB;IACF,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,WAAW,CAAC,CAAS;IAG7B,OAAO,CAAC,sBAAsB,CAAoB;gBAEtC,MAAM,EAAE,aAAa;IAejC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,yBAAyB;IAQjC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAmB7B,kBAAkB,IAAI,eAAe;IAIrC;;OAEG;IACH,mBAAmB,IAAI,eAAe,EAAE;IAMxC,iBAAiB,IAAI,cAAc;IAInC,yBAAyB,IAAI,OAAO;IAIpC,+BAA+B,IAAI,OAAO;IAM1C,mBAAmB,IAAI,gBAAgB;IAIvC,mBAAmB,IAAI,OAAO;IAI9B,qBAAqB,IAAI,kBAAkB;IAI3C,iBAAiB,IAAI,MAAM,EAAE;IAM7B,aAAa,IAAI,UAAU;IAI3B,aAAa,IAAI,OAAO;IAIxB,2BAA2B,IAAI,OAAO;IAItC,6BAA6B,IAAI,kBAAkB;IAInD,wBAAwB,IAAI,OAAO;IAInC,0BAA0B,IAAI,kBAAkB;IAMhD,eAAe,IAAI,YAAY;IAI/B,eAAe,IAAI,OAAO;IAI1B,qBAAqB,IAAI,OAAO;IAIhC,cAAc,IAAI,OAAO;IAMzB,cAAc,IAAI,MAAM,GAAG,SAAS;IAIpC,eAAe,IAAI,OAAO;IAM1B;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;CAG9B"}
|
|
@@ -42,6 +42,11 @@ const DEFAULT_LINT = {
|
|
|
42
42
|
severity: 'warning'
|
|
43
43
|
}
|
|
44
44
|
};
|
|
45
|
+
/**
|
|
46
|
+
* Default class attributes
|
|
47
|
+
* These are the JSX/HTML attributes that will be treated as class attributes
|
|
48
|
+
*/
|
|
49
|
+
const DEFAULT_CLASS_ATTRIBUTES = ['className', 'class', 'classList'];
|
|
45
50
|
/**
|
|
46
51
|
* Service responsible for managing plugin configuration
|
|
47
52
|
* Follows Single Responsibility Principle
|
|
@@ -55,6 +60,7 @@ class PluginConfigService {
|
|
|
55
60
|
this.validationConfig = this.initializeValidation(config);
|
|
56
61
|
this.lintConfig = this.initializeLint(config);
|
|
57
62
|
this.editorConfig = this.initializeEditor(config);
|
|
63
|
+
this.classAttributes = this.initializeClassAttributes(config);
|
|
58
64
|
// Convert to legacy format for extractors
|
|
59
65
|
this.utilityFunctionsLegacy = this.convertToLegacyFormat(this.utilitiesConfig);
|
|
60
66
|
}
|
|
@@ -114,6 +120,12 @@ class PluginConfigService {
|
|
|
114
120
|
}
|
|
115
121
|
};
|
|
116
122
|
}
|
|
123
|
+
initializeClassAttributes(config) {
|
|
124
|
+
const userAttributes = config.classAttributes || [];
|
|
125
|
+
// Merge default attributes with user-provided ones
|
|
126
|
+
// Use Set to avoid duplicates
|
|
127
|
+
return [...new Set([...DEFAULT_CLASS_ATTRIBUTES, ...userAttributes])];
|
|
128
|
+
}
|
|
117
129
|
/**
|
|
118
130
|
* Convert new utilities config to legacy UtilityFunction[] format
|
|
119
131
|
* This is needed for backwards compatibility with extractors
|
|
@@ -205,6 +217,15 @@ class PluginConfigService {
|
|
|
205
217
|
hasValidCssPath() {
|
|
206
218
|
return this.cssFilePath !== undefined && this.cssFilePath.length > 0;
|
|
207
219
|
}
|
|
220
|
+
// ---- Getters for class attributes ----
|
|
221
|
+
/**
|
|
222
|
+
* Get the configured class attributes
|
|
223
|
+
* Returns an array of attribute names that should be treated as class attributes
|
|
224
|
+
* Includes default attributes (className, class, classList) plus user-configured ones
|
|
225
|
+
*/
|
|
226
|
+
getClassAttributes() {
|
|
227
|
+
return this.classAttributes;
|
|
228
|
+
}
|
|
208
229
|
}
|
|
209
230
|
exports.PluginConfigService = PluginConfigService;
|
|
210
231
|
//# sourceMappingURL=PluginConfigService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginConfigService.js","sourceRoot":"","sources":["../../src/services/PluginConfigService.ts"],"names":[],"mappings":";;;AAWA;;;GAGG;AACH,MAAM,iBAAiB,GAAoB;IAC1C,EAAE,EAAE,GAAG,EAAE,oDAAoD;IAC7D,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,YAAY;IAChB,OAAO,EAAE,gBAAgB;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,gBAAgB,GAAmB;IACxC,gBAAgB,EAAE,IAAI;IACtB,sBAAsB,EAAE,IAAI;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,kBAAkB,GAEpB;IACH,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,OAAO;IACjB,cAAc,EAAE,EAAE;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,YAAY,GAAe;IAChC,OAAO,EAAE,IAAI;IACb,kBAAkB,EAAE;QACnB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,SAAS;KACnB;IACD,eAAe,EAAE;QAChB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,SAAS;KACnB;CACD,CAAC;AAEF;;;GAGG;AACH,MAAa,mBAAmB;
|
|
1
|
+
{"version":3,"file":"PluginConfigService.js","sourceRoot":"","sources":["../../src/services/PluginConfigService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginConfigService.spec.d.ts","sourceRoot":"","sources":["../../src/services/PluginConfigService.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const PluginConfigService_1 = require("./PluginConfigService");
|
|
4
|
+
describe('PluginConfigService', () => {
|
|
5
|
+
describe('classAttributes', () => {
|
|
6
|
+
it('should return default class attributes when not configured', () => {
|
|
7
|
+
const service = new PluginConfigService_1.PluginConfigService({});
|
|
8
|
+
const classAttributes = service.getClassAttributes();
|
|
9
|
+
expect(classAttributes).toContain('className');
|
|
10
|
+
expect(classAttributes).toContain('class');
|
|
11
|
+
expect(classAttributes).toContain('classList');
|
|
12
|
+
expect(classAttributes).toHaveLength(3);
|
|
13
|
+
});
|
|
14
|
+
it('should merge user attributes with defaults', () => {
|
|
15
|
+
const service = new PluginConfigService_1.PluginConfigService({
|
|
16
|
+
classAttributes: ['colorStyles', 'textStyles']
|
|
17
|
+
});
|
|
18
|
+
const classAttributes = service.getClassAttributes();
|
|
19
|
+
expect(classAttributes).toContain('className');
|
|
20
|
+
expect(classAttributes).toContain('class');
|
|
21
|
+
expect(classAttributes).toContain('classList');
|
|
22
|
+
expect(classAttributes).toContain('colorStyles');
|
|
23
|
+
expect(classAttributes).toContain('textStyles');
|
|
24
|
+
expect(classAttributes).toHaveLength(5);
|
|
25
|
+
});
|
|
26
|
+
it('should deduplicate attributes when user provides defaults', () => {
|
|
27
|
+
const service = new PluginConfigService_1.PluginConfigService({
|
|
28
|
+
classAttributes: ['className', 'colorStyles', 'class']
|
|
29
|
+
});
|
|
30
|
+
const classAttributes = service.getClassAttributes();
|
|
31
|
+
// Should not have duplicates
|
|
32
|
+
const uniqueAttributes = [...new Set(classAttributes)];
|
|
33
|
+
expect(classAttributes).toHaveLength(uniqueAttributes.length);
|
|
34
|
+
// Should contain all expected attributes
|
|
35
|
+
expect(classAttributes).toContain('className');
|
|
36
|
+
expect(classAttributes).toContain('class');
|
|
37
|
+
expect(classAttributes).toContain('classList');
|
|
38
|
+
expect(classAttributes).toContain('colorStyles');
|
|
39
|
+
});
|
|
40
|
+
it('should handle empty user attributes array', () => {
|
|
41
|
+
const service = new PluginConfigService_1.PluginConfigService({
|
|
42
|
+
classAttributes: []
|
|
43
|
+
});
|
|
44
|
+
const classAttributes = service.getClassAttributes();
|
|
45
|
+
expect(classAttributes).toContain('className');
|
|
46
|
+
expect(classAttributes).toContain('class');
|
|
47
|
+
expect(classAttributes).toContain('classList');
|
|
48
|
+
expect(classAttributes).toHaveLength(3);
|
|
49
|
+
});
|
|
50
|
+
it('should preserve order with defaults first', () => {
|
|
51
|
+
const service = new PluginConfigService_1.PluginConfigService({
|
|
52
|
+
classAttributes: ['colorStyles']
|
|
53
|
+
});
|
|
54
|
+
const classAttributes = service.getClassAttributes();
|
|
55
|
+
// Default attributes should come first
|
|
56
|
+
expect(classAttributes[0]).toBe('className');
|
|
57
|
+
expect(classAttributes[1]).toBe('class');
|
|
58
|
+
expect(classAttributes[2]).toBe('classList');
|
|
59
|
+
expect(classAttributes[3]).toBe('colorStyles');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('other configurations', () => {
|
|
63
|
+
it('should initialize with default utilities', () => {
|
|
64
|
+
const service = new PluginConfigService_1.PluginConfigService({});
|
|
65
|
+
const utilities = service.getUtilityFunctions();
|
|
66
|
+
expect(utilities).toContainEqual('cn');
|
|
67
|
+
expect(utilities).toContainEqual({ name: 'clsx', from: 'clsx' });
|
|
68
|
+
});
|
|
69
|
+
it('should enable variants by default', () => {
|
|
70
|
+
const service = new PluginConfigService_1.PluginConfigService({});
|
|
71
|
+
expect(service.isTailwindVariantsEnabled()).toBe(true);
|
|
72
|
+
expect(service.isClassVarianceAuthorityEnabled()).toBe(true);
|
|
73
|
+
});
|
|
74
|
+
it('should enable validation by default', () => {
|
|
75
|
+
const service = new PluginConfigService_1.PluginConfigService({});
|
|
76
|
+
expect(service.isValidationEnabled()).toBe(true);
|
|
77
|
+
expect(service.getValidationSeverity()).toBe('error');
|
|
78
|
+
});
|
|
79
|
+
it('should enable lint by default', () => {
|
|
80
|
+
const service = new PluginConfigService_1.PluginConfigService({});
|
|
81
|
+
expect(service.isLintEnabled()).toBe(true);
|
|
82
|
+
expect(service.isConflictingClassesEnabled()).toBe(true);
|
|
83
|
+
expect(service.isRepeatedClassesEnabled()).toBe(true);
|
|
84
|
+
});
|
|
85
|
+
it('should enable editor features by default', () => {
|
|
86
|
+
const service = new PluginConfigService_1.PluginConfigService({});
|
|
87
|
+
expect(service.isEditorEnabled()).toBe(true);
|
|
88
|
+
expect(service.isAutocompleteEnabled()).toBe(true);
|
|
89
|
+
expect(service.isHoverEnabled()).toBe(true);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=PluginConfigService.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginConfigService.spec.js","sourceRoot":"","sources":["../../src/services/PluginConfigService.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidationService.d.ts","sourceRoot":"","sources":["../../src/services/ValidationService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAiB,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,YAAY,EAA4B,MAAM,4CAA4C,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;GAGG;AACH,qBAAa,iBAAiB;IAI5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAN/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;gBAG1C,iBAAiB,EAAE,0BAA0B,EAC7C,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,mBAAmB,EAC9B,aAAa,EAAE,mBAAmB,EACnD,WAAW,CAAC,EAAE,YAAY;IAQ3B;;;OAGG;IACH,YAAY,CACX,UAAU,EAAE,OAAO,EAAE,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,gBAAgB,EAAE,eAAe,EAAE,EACnC,WAAW,CAAC,EAAE,EAAE,CAAC,WAAW,GAC1B,EAAE,CAAC,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"ValidationService.d.ts","sourceRoot":"","sources":["../../src/services/ValidationService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAiB,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,YAAY,EAA4B,MAAM,4CAA4C,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;GAGG;AACH,qBAAa,iBAAiB;IAI5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAN/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;gBAG1C,iBAAiB,EAAE,0BAA0B,EAC7C,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,mBAAmB,EAC9B,aAAa,EAAE,mBAAmB,EACnD,WAAW,CAAC,EAAE,YAAY;IAQ3B;;;OAGG;IACH,YAAY,CACX,UAAU,EAAE,OAAO,EAAE,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,gBAAgB,EAAE,eAAe,EAAE,EACnC,WAAW,CAAC,EAAE,EAAE,CAAC,WAAW,GAC1B,EAAE,CAAC,UAAU,EAAE;IA6ElB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CAiG5B"}
|
|
@@ -26,7 +26,7 @@ class ValidationService {
|
|
|
26
26
|
return [];
|
|
27
27
|
}
|
|
28
28
|
// Extract all class names from the file
|
|
29
|
-
const classNames = this.extractionService.extractFromSourceFile(typescript, sourceFile, utilityFunctions, typeChecker);
|
|
29
|
+
const classNames = this.extractionService.extractFromSourceFile(typescript, sourceFile, utilityFunctions, typeChecker, this.configService.getClassAttributes());
|
|
30
30
|
const diagnostics = [];
|
|
31
31
|
// Validation diagnostics (invalid class detection)
|
|
32
32
|
if (this.configService.isValidationEnabled()) {
|
|
@@ -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,aAAkC,EACnD,WAA0B;QAJT,sBAAiB,GAAjB,iBAAiB,CAA4B;QAC7C,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,cAAS,GAAT,SAAS,CAAqB;QAC9B,kBAAa,GAAb,aAAa,CAAqB;QAGnD,IAAI,CAAC,gBAAgB,GAAG,IAAI,mDAAwB,EAAE,CAAC;QACvD,IAAI,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACnD,CAAC;IACF,CAAC;IAED;;;OAGG;IACH,YAAY,CACX,UAAqB,EACrB,UAAyB,EACzB,gBAAmC,EACnC,WAA4B;QAE5B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;YACrC,OAAO,EAAE,CAAC;QACX,CAAC;QAED,wCAAwC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAC9D,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,
|
|
1
|
+
{"version":3,"file":"ValidationService.js","sourceRoot":"","sources":["../../src/services/ValidationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,12 +20,12 @@ var Framework;
|
|
|
20
20
|
* @returns The detected framework or null if not supported
|
|
21
21
|
*/
|
|
22
22
|
function detectFramework(fileName) {
|
|
23
|
-
// Vue Single File Components
|
|
24
|
-
if (fileName.endsWith('.vue')) {
|
|
23
|
+
// Vue Single File Components (including virtual .vue.ts files from Volar)
|
|
24
|
+
if (fileName.endsWith('.vue') || fileName.includes('.vue.')) {
|
|
25
25
|
return Framework.VUE;
|
|
26
26
|
}
|
|
27
|
-
// Svelte components
|
|
28
|
-
if (fileName.endsWith('.svelte')) {
|
|
27
|
+
// Svelte components (including virtual .svelte.ts files)
|
|
28
|
+
if (fileName.endsWith('.svelte') || fileName.includes('.svelte.')) {
|
|
29
29
|
return Framework.SVELTE;
|
|
30
30
|
}
|
|
31
31
|
// JSX/TSX files (React, Solid, etc.)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameworkDetector.js","sourceRoot":"","sources":["../../src/utils/FrameworkDetector.ts"],"names":[],"mappings":";;;AAgBA,0CAwBC;AAQD,0CAEC;AAlDD;;GAEG;AACH,IAAY,SAIX;AAJD,WAAY,SAAS;IACpB,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,8BAAiB,CAAA;AAClB,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB;AAED;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC/C,
|
|
1
|
+
{"version":3,"file":"FrameworkDetector.js","sourceRoot":"","sources":["../../src/utils/FrameworkDetector.ts"],"names":[],"mappings":";;;AAgBA,0CAwBC;AAQD,0CAEC;AAlDD;;GAEG;AACH,IAAY,SAIX;AAJD,WAAY,SAAS;IACpB,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,8BAAiB,CAAA;AAClB,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB;AAED;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC/C,0EAA0E;IAC1E,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,yDAAyD;IACzD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACnE,OAAO,SAAS,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,qCAAqC;IACrC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,oDAAoD;IACpD,0CAA0C;IAC1C,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,wBAAwB;IACxB,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,QAAgB;IAC/C,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;AAC3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tailwind-typescript-plugin",
|
|
3
|
-
"version": "1.4.0-beta.
|
|
3
|
+
"version": "1.4.0-beta.18",
|
|
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",
|