@css-modules-kit/ts-plugin 0.0.6 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/language-plugin.d.ts +4 -4
- package/dist/language-plugin.d.ts.map +1 -1
- package/dist/language-plugin.js +16 -5
- package/dist/language-plugin.js.map +1 -1
- package/dist/language-service/feature/completion.js +1 -1
- package/dist/language-service/feature/completion.js.map +1 -1
- package/dist/language-service/feature/semantic-diagnostic.d.ts +1 -1
- package/dist/language-service/feature/semantic-diagnostic.d.ts.map +1 -1
- package/dist/language-service/feature/semantic-diagnostic.js +1 -22
- package/dist/language-service/feature/semantic-diagnostic.js.map +1 -1
- package/dist/language-service/feature/syntactic-diagnostic.d.ts +1 -1
- package/dist/language-service/feature/syntactic-diagnostic.d.ts.map +1 -1
- package/dist/language-service/feature/syntactic-diagnostic.js +3 -21
- package/dist/language-service/feature/syntactic-diagnostic.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +4 -3
- package/src/language-plugin.ts +18 -7
- package/src/language-service/feature/completion.ts +1 -1
- package/src/language-service/feature/semantic-diagnostic.ts +4 -24
- package/src/language-service/feature/syntactic-diagnostic.ts +6 -21
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,iDA4CV,CAAC;AAEH,SAAS,MAAM,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -30,10 +30,11 @@ const plugin = (0, createLanguageServicePlugin_js_1.createLanguageServicePlugin)
|
|
|
30
30
|
return { languagePlugins: [] };
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
const
|
|
33
|
+
const moduleResolutionCache = info.languageServiceHost.getModuleResolutionCache?.();
|
|
34
|
+
const resolver = (0, core_1.createResolver)(config.compilerOptions, moduleResolutionCache);
|
|
34
35
|
const matchesPattern = (0, core_1.createMatchesPattern)(config);
|
|
35
36
|
return {
|
|
36
|
-
languagePlugins: [(0, language_plugin_js_1.
|
|
37
|
+
languagePlugins: [(0, language_plugin_js_1.createCSSLanguagePlugin)(resolver, matchesPattern)],
|
|
37
38
|
setup: (language) => {
|
|
38
39
|
info.languageService = (0, proxy_js_1.proxyLanguageService)(language, info.languageService, info.project, resolver, matchesPattern);
|
|
39
40
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,gDAA6F;AAC7F,gDAAkE;AAClE,oHAA8G;AAC9G,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,gDAA6F;AAC7F,gDAAkE;AAClE,oHAA8G;AAC9G,6DAA+D;AAC/D,0DAAmE;AAEnE,MAAM,MAAM,GAAG,IAAA,4DAA2B,EAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;IACtD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QACxG,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,MAAiB,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,qBAAc,EAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACvD,2BAA2B;QAC3B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CACrC,4DAA4D,MAAM,CAAC,cAAc,GAAG,CACrF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uDAAuD;QACvD,IAAI,KAAK,YAAY,gCAAyB,EAAE,CAAC;YAC/C,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,GAAG,8DAA8D,CAAC;YACzE,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,GAAG,IAAI,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC9B,GAAG,IAAI,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7C,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,EAAE,CAAC;IACpF,MAAM,QAAQ,GAAG,IAAA,qBAAc,EAAC,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IAC/E,MAAM,cAAc,GAAG,IAAA,2BAAoB,EAAC,MAAM,CAAC,CAAC;IAEpD,OAAO;QACL,eAAe,EAAE,CAAC,IAAA,4CAAuB,EAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACpE,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE;YAClB,IAAI,CAAC,eAAe,GAAG,IAAA,+BAAoB,EACzC,QAAQ,EACR,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,cAAc,CACf,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,iBAAS,MAAM,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { CSSModule, MatchesPattern, Resolver
|
|
1
|
+
import type { CSSModule, DiagnosticWithLocation, MatchesPattern, Resolver } from '@css-modules-kit/core';
|
|
2
2
|
import type { LanguagePlugin, SourceScript, VirtualCode } from '@volar/language-core';
|
|
3
|
-
export declare const LANGUAGE_ID = "css
|
|
3
|
+
export declare const LANGUAGE_ID = "css";
|
|
4
4
|
export declare const CMK_DATA_KEY: unique symbol;
|
|
5
5
|
interface CSSModuleVirtualCode extends VirtualCode {
|
|
6
6
|
[CMK_DATA_KEY]: {
|
|
7
7
|
cssModule: CSSModule;
|
|
8
|
-
|
|
8
|
+
syntacticDiagnostics: DiagnosticWithLocation[];
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
11
|
export interface CSSModuleScript extends SourceScript<string> {
|
|
@@ -13,7 +13,7 @@ export interface CSSModuleScript extends SourceScript<string> {
|
|
|
13
13
|
root: CSSModuleVirtualCode;
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
export declare function
|
|
16
|
+
export declare function createCSSLanguagePlugin(resolver: Resolver, matchesPattern: MatchesPattern): LanguagePlugin<string, VirtualCode>;
|
|
17
17
|
export declare function isCSSModuleScript(script: SourceScript<string> | undefined): script is CSSModuleScript;
|
|
18
18
|
export {};
|
|
19
19
|
//# sourceMappingURL=language-plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-plugin.d.ts","sourceRoot":"","sources":["../src/language-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"language-plugin.d.ts","sourceRoot":"","sources":["../src/language-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEzG,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAItF,eAAO,MAAM,WAAW,QAAQ,CAAC;AAEjC,eAAO,MAAM,YAAY,eAAiC,CAAC;AAE3D,UAAU,oBAAqB,SAAQ,WAAW;IAChD,CAAC,YAAY,CAAC,EAAE;QACd,SAAS,EAAE,SAAS,CAAC;QACrB,oBAAoB,EAAE,sBAAsB,EAAE,CAAC;KAChD,CAAC;CACH;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,MAAM,CAAC;IAC3D,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG;QAC7C,IAAI,EAAE,oBAAoB,CAAC;KAC5B,CAAC;CACH;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,GAC7B,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAgErC;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,MAAM,IAAI,eAAe,CAIrG"}
|
package/dist/language-plugin.js
CHANGED
|
@@ -4,22 +4,33 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.CMK_DATA_KEY = exports.LANGUAGE_ID = void 0;
|
|
7
|
-
exports.
|
|
7
|
+
exports.createCSSLanguagePlugin = createCSSLanguagePlugin;
|
|
8
8
|
exports.isCSSModuleScript = isCSSModuleScript;
|
|
9
9
|
const core_1 = require("@css-modules-kit/core");
|
|
10
10
|
const typescript_1 = __importDefault(require("typescript"));
|
|
11
|
-
exports.LANGUAGE_ID = 'css
|
|
11
|
+
exports.LANGUAGE_ID = 'css';
|
|
12
12
|
exports.CMK_DATA_KEY = Symbol('css-modules-kit-data');
|
|
13
|
-
function
|
|
13
|
+
function createCSSLanguagePlugin(resolver, matchesPattern) {
|
|
14
14
|
return {
|
|
15
15
|
getLanguageId(scriptId) {
|
|
16
|
-
if (!
|
|
16
|
+
if (!scriptId.endsWith('.css'))
|
|
17
17
|
return undefined;
|
|
18
18
|
return exports.LANGUAGE_ID;
|
|
19
19
|
},
|
|
20
20
|
createVirtualCode(scriptId, languageId, snapshot) {
|
|
21
21
|
if (languageId !== exports.LANGUAGE_ID)
|
|
22
22
|
return undefined;
|
|
23
|
+
if (!matchesPattern(scriptId)) {
|
|
24
|
+
// `scriptId` is CSS, but not a CSS module.
|
|
25
|
+
// If an empty VirtualCode is not returned for a CSS file, tsserver will treat it as TypeScript code.
|
|
26
|
+
// ref: https://github.com/mizdra/css-modules-kit/issues/170
|
|
27
|
+
return {
|
|
28
|
+
id: 'main',
|
|
29
|
+
languageId,
|
|
30
|
+
snapshot,
|
|
31
|
+
mappings: [],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
23
34
|
const length = snapshot.getLength();
|
|
24
35
|
const cssModuleCode = snapshot.getText(0, length);
|
|
25
36
|
const { cssModule, diagnostics } = (0, core_1.parseCSSModule)(cssModuleCode, {
|
|
@@ -43,7 +54,7 @@ function createCSSModuleLanguagePlugin(resolver, matchesPattern) {
|
|
|
43
54
|
linkedCodeMappings: [{ ...linkedCodeMapping, data: undefined }],
|
|
44
55
|
[exports.CMK_DATA_KEY]: {
|
|
45
56
|
cssModule,
|
|
46
|
-
diagnostics,
|
|
57
|
+
syntacticDiagnostics: diagnostics,
|
|
47
58
|
},
|
|
48
59
|
};
|
|
49
60
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-plugin.js","sourceRoot":"","sources":["../src/language-plugin.ts"],"names":[],"mappings":";;;;;;AAuBA,
|
|
1
|
+
{"version":3,"file":"language-plugin.js","sourceRoot":"","sources":["../src/language-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,7 +40,7 @@ function isStylesEntryForCSSModuleFile(entry, cssModuleFileName) {
|
|
|
40
40
|
function isClassNamePropEntry(entry) {
|
|
41
41
|
return (entry.name === 'className' &&
|
|
42
42
|
entry.kind === typescript_1.default.ScriptElementKind.memberVariableElement &&
|
|
43
|
-
entry.insertText === 'className="$1"' &&
|
|
43
|
+
(entry.insertText === 'className="$1"' || entry.insertText === "className='$1'") &&
|
|
44
44
|
entry.isSnippet);
|
|
45
45
|
}
|
|
46
46
|
//# sourceMappingURL=completion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/language-service/feature/completion.ts"],"names":[],"mappings":";;;;;AAGA,4DAqBC;AAxBD,gDAAsG;AACtG,4DAA4B;AAE5B,SAAgB,wBAAwB,CACtC,eAAmC;IAEnC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE;QACzD,MAAM,KAAK,GAAG,eAAe,CAAC,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAExG,IAAI,IAAA,0BAAmB,EAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;YAC3C,MAAM,iBAAiB,GAAG,IAAA,2BAAoB,EAAC,QAAQ,CAAC,CAAC;YACzD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC;oBAC5D,2FAA2F;oBAC3F,qEAAqE;oBACrE,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACvB,CAAC;qBAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvC,yEAAyE;oBACzE,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,6BAA6B,CAAC,KAAyB,EAAE,iBAAyB;IACzF,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,yBAAkB;QACjC,KAAK,CAAC,IAAI;QACV,wEAAwE;QACxE,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAE,CAAC,kBAAkB,CAAC,OAAO;QACvD,KAAK,CAAC,IAAI,CAAC,QAAQ;QACnB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,iBAAiB,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAyB;IACrD,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,WAAW;QAC1B,KAAK,CAAC,IAAI,KAAK,oBAAE,CAAC,iBAAiB,CAAC,qBAAqB;QACzD,KAAK,CAAC,UAAU,KAAK,gBAAgB;
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/language-service/feature/completion.ts"],"names":[],"mappings":";;;;;AAGA,4DAqBC;AAxBD,gDAAsG;AACtG,4DAA4B;AAE5B,SAAgB,wBAAwB,CACtC,eAAmC;IAEnC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE;QACzD,MAAM,KAAK,GAAG,eAAe,CAAC,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAExG,IAAI,IAAA,0BAAmB,EAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;YAC3C,MAAM,iBAAiB,GAAG,IAAA,2BAAoB,EAAC,QAAQ,CAAC,CAAC;YACzD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC;oBAC5D,2FAA2F;oBAC3F,qEAAqE;oBACrE,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACvB,CAAC;qBAAM,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvC,yEAAyE;oBACzE,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,6BAA6B,CAAC,KAAyB,EAAE,iBAAyB;IACzF,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,yBAAkB;QACjC,KAAK,CAAC,IAAI;QACV,wEAAwE;QACxE,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,oBAAE,CAAC,kBAAkB,CAAC,OAAO;QACvD,KAAK,CAAC,IAAI,CAAC,QAAQ;QACnB,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,iBAAiB,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAyB;IACrD,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,WAAW;QAC1B,KAAK,CAAC,IAAI,KAAK,oBAAE,CAAC,iBAAiB,CAAC,qBAAqB;QACzD,CAAC,KAAK,CAAC,UAAU,KAAK,gBAAgB,IAAI,KAAK,CAAC,UAAU,KAAK,gBAAgB,CAAC;QAChF,KAAK,CAAC,SAAS,CAChB,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CSSModule, ExportBuilder, MatchesPattern, Resolver } from '@css-modules-kit/core';
|
|
2
2
|
import type { Language } from '@volar/language-core';
|
|
3
|
-
import ts from 'typescript';
|
|
3
|
+
import type ts from 'typescript';
|
|
4
4
|
export declare function getSemanticDiagnostics(language: Language<string>, languageService: ts.LanguageService, exportBuilder: ExportBuilder, resolver: Resolver, matchesPattern: MatchesPattern, getCSSModule: (path: string) => CSSModule | undefined): ts.LanguageService['getSemanticDiagnostics'];
|
|
5
5
|
//# sourceMappingURL=semantic-diagnostic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-diagnostic.d.ts","sourceRoot":"","sources":["../../../src/language-service/feature/semantic-diagnostic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"semantic-diagnostic.d.ts","sourceRoot":"","sources":["../../../src/language-service/feature/semantic-diagnostic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEhG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAIjC,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC1B,eAAe,EAAE,EAAE,CAAC,eAAe,EACnC,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,GACpD,EAAE,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAkB9C"}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.getSemanticDiagnostics = getSemanticDiagnostics;
|
|
7
4
|
const core_1 = require("@css-modules-kit/core");
|
|
8
|
-
const typescript_1 = __importDefault(require("typescript"));
|
|
9
5
|
const language_plugin_js_1 = require("../../language-plugin.js");
|
|
10
|
-
const util_js_1 = require("../../util.js");
|
|
11
6
|
// eslint-disable-next-line max-params
|
|
12
7
|
function getSemanticDiagnostics(language, languageService, exportBuilder, resolver, matchesPattern, getCSSModule) {
|
|
13
8
|
return (fileName) => {
|
|
@@ -20,26 +15,10 @@ function getSemanticDiagnostics(language, languageService, exportBuilder, resolv
|
|
|
20
15
|
exportBuilder.clearCache();
|
|
21
16
|
const diagnostics = (0, core_1.checkCSSModule)(cssModule, exportBuilder, matchesPattern, resolver, getCSSModule);
|
|
22
17
|
const sourceFile = languageService.getProgram().getSourceFile(fileName);
|
|
23
|
-
const tsDiagnostics = diagnostics.map((diagnostic) => convertDiagnostic(diagnostic, sourceFile));
|
|
18
|
+
const tsDiagnostics = diagnostics.map((diagnostic) => (0, core_1.convertDiagnostic)(diagnostic, () => sourceFile));
|
|
24
19
|
prior.push(...tsDiagnostics);
|
|
25
20
|
}
|
|
26
21
|
return prior;
|
|
27
22
|
};
|
|
28
23
|
}
|
|
29
|
-
function convertDiagnostic(diagnostic, sourceFile) {
|
|
30
|
-
const start = diagnostic.start ?
|
|
31
|
-
typescript_1.default.getPositionOfLineAndCharacter(sourceFile, diagnostic.start.line - 1, diagnostic.start.column - 1)
|
|
32
|
-
: undefined;
|
|
33
|
-
const length = start !== undefined && diagnostic.end ?
|
|
34
|
-
typescript_1.default.getPositionOfLineAndCharacter(sourceFile, diagnostic.end.line - 1, diagnostic.end.column - 1) - start
|
|
35
|
-
: undefined;
|
|
36
|
-
return {
|
|
37
|
-
file: sourceFile,
|
|
38
|
-
start,
|
|
39
|
-
category: (0, util_js_1.convertErrorCategory)(diagnostic.category),
|
|
40
|
-
length,
|
|
41
|
-
messageText: diagnostic.text,
|
|
42
|
-
code: util_js_1.TS_ERROR_CODE_FOR_CMK_ERROR,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
24
|
//# sourceMappingURL=semantic-diagnostic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-diagnostic.js","sourceRoot":"","sources":["../../../src/language-service/feature/semantic-diagnostic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"semantic-diagnostic.js","sourceRoot":"","sources":["../../../src/language-service/feature/semantic-diagnostic.ts"],"names":[],"mappings":";;AAOA,wDAyBC;AA/BD,gDAA0E;AAG1E,iEAA2E;AAE3E,sCAAsC;AACtC,SAAgB,sBAAsB,CACpC,QAA0B,EAC1B,eAAmC,EACnC,aAA4B,EAC5B,QAAkB,EAClB,cAA8B,EAC9B,YAAqD;IAErD,OAAO,CAAC,QAAgB,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,eAAe,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,IAAA,sCAAiB,EAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,iCAAY,CAAC,CAAC,SAAS,CAAC;YAEtD,qDAAqD;YACrD,aAAa,CAAC,UAAU,EAAE,CAAC;YAE3B,MAAM,WAAW,GAAG,IAAA,qBAAc,EAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YACrG,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAG,CAAC,aAAa,CAAC,QAAQ,CAAE,CAAC;YAC1E,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAA,wBAAiB,EAAC,UAAU,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YACvG,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Language } from '@volar/language-core';
|
|
2
|
-
import ts from 'typescript';
|
|
2
|
+
import type ts from 'typescript';
|
|
3
3
|
export declare function getSyntacticDiagnostics(language: Language<string>, languageService: ts.LanguageService): ts.LanguageService['getSyntacticDiagnostics'];
|
|
4
4
|
//# sourceMappingURL=syntactic-diagnostic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntactic-diagnostic.d.ts","sourceRoot":"","sources":["../../../src/language-service/feature/syntactic-diagnostic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"syntactic-diagnostic.d.ts","sourceRoot":"","sources":["../../../src/language-service/feature/syntactic-diagnostic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAGjC,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC1B,eAAe,EAAE,EAAE,CAAC,eAAe,GAClC,EAAE,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAe/C"}
|
|
@@ -1,38 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.getSyntacticDiagnostics = getSyntacticDiagnostics;
|
|
7
|
-
const
|
|
4
|
+
const core_1 = require("@css-modules-kit/core");
|
|
8
5
|
const language_plugin_js_1 = require("../../language-plugin.js");
|
|
9
|
-
const util_js_1 = require("../../util.js");
|
|
10
6
|
function getSyntacticDiagnostics(language, languageService) {
|
|
11
7
|
return (fileName) => {
|
|
12
8
|
const prior = languageService.getSyntacticDiagnostics(fileName);
|
|
13
9
|
const script = language.scripts.get(fileName);
|
|
14
10
|
if ((0, language_plugin_js_1.isCSSModuleScript)(script)) {
|
|
15
11
|
const virtualCode = script.generated.root;
|
|
16
|
-
const diagnostics = virtualCode[language_plugin_js_1.CMK_DATA_KEY].
|
|
12
|
+
const diagnostics = virtualCode[language_plugin_js_1.CMK_DATA_KEY].syntacticDiagnostics;
|
|
17
13
|
const sourceFile = languageService.getProgram().getSourceFile(fileName);
|
|
18
|
-
const tsDiagnostics = diagnostics.map((diagnostic) =>
|
|
14
|
+
const tsDiagnostics = diagnostics.map((diagnostic) => (0, core_1.convertDiagnosticWithLocation)(diagnostic, () => sourceFile));
|
|
19
15
|
prior.push(...tsDiagnostics);
|
|
20
16
|
}
|
|
21
17
|
return prior;
|
|
22
18
|
};
|
|
23
19
|
}
|
|
24
|
-
function convertDiagnostic(diagnostic, sourceFile) {
|
|
25
|
-
const start = typescript_1.default.getPositionOfLineAndCharacter(sourceFile, diagnostic.start.line - 1, diagnostic.start.column - 1);
|
|
26
|
-
const length = diagnostic.end ?
|
|
27
|
-
typescript_1.default.getPositionOfLineAndCharacter(sourceFile, diagnostic.end.line - 1, diagnostic.end.column - 1) - start
|
|
28
|
-
: 1;
|
|
29
|
-
return {
|
|
30
|
-
file: sourceFile,
|
|
31
|
-
start,
|
|
32
|
-
category: (0, util_js_1.convertErrorCategory)(diagnostic.category),
|
|
33
|
-
length,
|
|
34
|
-
messageText: diagnostic.text,
|
|
35
|
-
code: util_js_1.TS_ERROR_CODE_FOR_CMK_ERROR,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
20
|
//# sourceMappingURL=syntactic-diagnostic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syntactic-diagnostic.js","sourceRoot":"","sources":["../../../src/language-service/feature/syntactic-diagnostic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"syntactic-diagnostic.js","sourceRoot":"","sources":["../../../src/language-service/feature/syntactic-diagnostic.ts"],"names":[],"mappings":";;AAKA,0DAkBC;AAvBD,gDAAsE;AAGtE,iEAA2E;AAE3E,SAAgB,uBAAuB,CACrC,QAA0B,EAC1B,eAAmC;IAEnC,OAAO,CAAC,QAAgB,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,eAAe,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,IAAA,sCAAiB,EAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1C,MAAM,WAAW,GAAG,WAAW,CAAC,iCAAY,CAAC,CAAC,oBAAoB,CAAC;YACnE,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAG,CAAC,aAAa,CAAC,QAAQ,CAAE,CAAC;YAC1E,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CACnD,IAAA,oCAA6B,EAAC,UAAU,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAC5D,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@css-modules-kit/ts-plugin",
|
|
3
3
|
"description": "A TypeScript Language Service Plugin for CSS Modules",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.1.1",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"repository": {
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@volar/language-core": "^2.4.11",
|
|
41
41
|
"@volar/typescript": "^2.4.11",
|
|
42
|
-
"@css-modules-kit/core": "^0.
|
|
42
|
+
"@css-modules-kit/core": "^0.2.0"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"typescript": ">=5.6.3"
|
package/src/index.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { CMKConfig } from '@css-modules-kit/core';
|
|
|
2
2
|
import { createMatchesPattern, createResolver, readConfigFile } from '@css-modules-kit/core';
|
|
3
3
|
import { TsConfigFileNotFoundError } from '@css-modules-kit/core';
|
|
4
4
|
import { createLanguageServicePlugin } from '@volar/typescript/lib/quickstart/createLanguageServicePlugin.js';
|
|
5
|
-
import {
|
|
5
|
+
import { createCSSLanguagePlugin } from './language-plugin.js';
|
|
6
6
|
import { proxyLanguageService } from './language-service/proxy.js';
|
|
7
7
|
|
|
8
8
|
const plugin = createLanguageServicePlugin((ts, info) => {
|
|
@@ -33,11 +33,12 @@ const plugin = createLanguageServicePlugin((ts, info) => {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
const
|
|
36
|
+
const moduleResolutionCache = info.languageServiceHost.getModuleResolutionCache?.();
|
|
37
|
+
const resolver = createResolver(config.compilerOptions, moduleResolutionCache);
|
|
37
38
|
const matchesPattern = createMatchesPattern(config);
|
|
38
39
|
|
|
39
40
|
return {
|
|
40
|
-
languagePlugins: [
|
|
41
|
+
languagePlugins: [createCSSLanguagePlugin(resolver, matchesPattern)],
|
|
41
42
|
setup: (language) => {
|
|
42
43
|
info.languageService = proxyLanguageService(
|
|
43
44
|
language,
|
package/src/language-plugin.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import type { CSSModule, MatchesPattern, Resolver
|
|
1
|
+
import type { CSSModule, DiagnosticWithLocation, MatchesPattern, Resolver } from '@css-modules-kit/core';
|
|
2
2
|
import { createDts, parseCSSModule } from '@css-modules-kit/core';
|
|
3
3
|
import type { LanguagePlugin, SourceScript, VirtualCode } from '@volar/language-core';
|
|
4
4
|
import type {} from '@volar/typescript';
|
|
5
5
|
import ts from 'typescript';
|
|
6
6
|
|
|
7
|
-
export const LANGUAGE_ID = 'css
|
|
7
|
+
export const LANGUAGE_ID = 'css';
|
|
8
8
|
|
|
9
9
|
export const CMK_DATA_KEY = Symbol('css-modules-kit-data');
|
|
10
10
|
|
|
11
11
|
interface CSSModuleVirtualCode extends VirtualCode {
|
|
12
12
|
[CMK_DATA_KEY]: {
|
|
13
13
|
cssModule: CSSModule;
|
|
14
|
-
|
|
14
|
+
syntacticDiagnostics: DiagnosticWithLocation[];
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
|
|
@@ -21,17 +21,28 @@ export interface CSSModuleScript extends SourceScript<string> {
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export function
|
|
24
|
+
export function createCSSLanguagePlugin(
|
|
25
25
|
resolver: Resolver,
|
|
26
26
|
matchesPattern: MatchesPattern,
|
|
27
27
|
): LanguagePlugin<string, VirtualCode> {
|
|
28
28
|
return {
|
|
29
29
|
getLanguageId(scriptId) {
|
|
30
|
-
if (!
|
|
30
|
+
if (!scriptId.endsWith('.css')) return undefined;
|
|
31
31
|
return LANGUAGE_ID;
|
|
32
32
|
},
|
|
33
|
-
createVirtualCode(scriptId, languageId, snapshot): CSSModuleVirtualCode | undefined {
|
|
33
|
+
createVirtualCode(scriptId, languageId, snapshot): VirtualCode | CSSModuleVirtualCode | undefined {
|
|
34
34
|
if (languageId !== LANGUAGE_ID) return undefined;
|
|
35
|
+
if (!matchesPattern(scriptId)) {
|
|
36
|
+
// `scriptId` is CSS, but not a CSS module.
|
|
37
|
+
// If an empty VirtualCode is not returned for a CSS file, tsserver will treat it as TypeScript code.
|
|
38
|
+
// ref: https://github.com/mizdra/css-modules-kit/issues/170
|
|
39
|
+
return {
|
|
40
|
+
id: 'main',
|
|
41
|
+
languageId,
|
|
42
|
+
snapshot,
|
|
43
|
+
mappings: [],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
35
46
|
|
|
36
47
|
const length = snapshot.getLength();
|
|
37
48
|
const cssModuleCode = snapshot.getText(0, length);
|
|
@@ -56,7 +67,7 @@ export function createCSSModuleLanguagePlugin(
|
|
|
56
67
|
linkedCodeMappings: [{ ...linkedCodeMapping, data: undefined }],
|
|
57
68
|
[CMK_DATA_KEY]: {
|
|
58
69
|
cssModule,
|
|
59
|
-
diagnostics,
|
|
70
|
+
syntacticDiagnostics: diagnostics,
|
|
60
71
|
},
|
|
61
72
|
};
|
|
62
73
|
},
|
|
@@ -42,7 +42,7 @@ function isClassNamePropEntry(entry: ts.CompletionEntry) {
|
|
|
42
42
|
return (
|
|
43
43
|
entry.name === 'className' &&
|
|
44
44
|
entry.kind === ts.ScriptElementKind.memberVariableElement &&
|
|
45
|
-
entry.insertText === 'className="$1"' &&
|
|
45
|
+
(entry.insertText === 'className="$1"' || entry.insertText === "className='$1'") &&
|
|
46
46
|
entry.isSnippet
|
|
47
47
|
);
|
|
48
48
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type { CSSModule, ExportBuilder, MatchesPattern, Resolver
|
|
2
|
-
import { checkCSSModule } from '@css-modules-kit/core';
|
|
1
|
+
import type { CSSModule, ExportBuilder, MatchesPattern, Resolver } from '@css-modules-kit/core';
|
|
2
|
+
import { checkCSSModule, convertDiagnostic } from '@css-modules-kit/core';
|
|
3
3
|
import type { Language } from '@volar/language-core';
|
|
4
|
-
import ts from 'typescript';
|
|
4
|
+
import type ts from 'typescript';
|
|
5
5
|
import { CMK_DATA_KEY, isCSSModuleScript } from '../../language-plugin.js';
|
|
6
|
-
import { convertErrorCategory, TS_ERROR_CODE_FOR_CMK_ERROR } from '../../util.js';
|
|
7
6
|
|
|
8
7
|
// eslint-disable-next-line max-params
|
|
9
8
|
export function getSemanticDiagnostics(
|
|
@@ -26,28 +25,9 @@ export function getSemanticDiagnostics(
|
|
|
26
25
|
|
|
27
26
|
const diagnostics = checkCSSModule(cssModule, exportBuilder, matchesPattern, resolver, getCSSModule);
|
|
28
27
|
const sourceFile = languageService.getProgram()!.getSourceFile(fileName)!;
|
|
29
|
-
const tsDiagnostics = diagnostics.map((diagnostic) => convertDiagnostic(diagnostic, sourceFile));
|
|
28
|
+
const tsDiagnostics = diagnostics.map((diagnostic) => convertDiagnostic(diagnostic, () => sourceFile));
|
|
30
29
|
prior.push(...tsDiagnostics);
|
|
31
30
|
}
|
|
32
31
|
return prior;
|
|
33
32
|
};
|
|
34
33
|
}
|
|
35
|
-
|
|
36
|
-
function convertDiagnostic(diagnostic: SemanticDiagnostic, sourceFile: ts.SourceFile): ts.Diagnostic {
|
|
37
|
-
const start =
|
|
38
|
-
diagnostic.start ?
|
|
39
|
-
ts.getPositionOfLineAndCharacter(sourceFile, diagnostic.start.line - 1, diagnostic.start.column - 1)
|
|
40
|
-
: undefined;
|
|
41
|
-
const length =
|
|
42
|
-
start !== undefined && diagnostic.end ?
|
|
43
|
-
ts.getPositionOfLineAndCharacter(sourceFile, diagnostic.end.line - 1, diagnostic.end.column - 1) - start
|
|
44
|
-
: undefined;
|
|
45
|
-
return {
|
|
46
|
-
file: sourceFile,
|
|
47
|
-
start,
|
|
48
|
-
category: convertErrorCategory(diagnostic.category),
|
|
49
|
-
length,
|
|
50
|
-
messageText: diagnostic.text,
|
|
51
|
-
code: TS_ERROR_CODE_FOR_CMK_ERROR,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { convertDiagnosticWithLocation } from '@css-modules-kit/core';
|
|
2
2
|
import type { Language } from '@volar/language-core';
|
|
3
|
-
import ts from 'typescript';
|
|
3
|
+
import type ts from 'typescript';
|
|
4
4
|
import { CMK_DATA_KEY, isCSSModuleScript } from '../../language-plugin.js';
|
|
5
|
-
import { convertErrorCategory, TS_ERROR_CODE_FOR_CMK_ERROR } from '../../util.js';
|
|
6
5
|
|
|
7
6
|
export function getSyntacticDiagnostics(
|
|
8
7
|
language: Language<string>,
|
|
@@ -13,27 +12,13 @@ export function getSyntacticDiagnostics(
|
|
|
13
12
|
const script = language.scripts.get(fileName);
|
|
14
13
|
if (isCSSModuleScript(script)) {
|
|
15
14
|
const virtualCode = script.generated.root;
|
|
16
|
-
const diagnostics = virtualCode[CMK_DATA_KEY].
|
|
15
|
+
const diagnostics = virtualCode[CMK_DATA_KEY].syntacticDiagnostics;
|
|
17
16
|
const sourceFile = languageService.getProgram()!.getSourceFile(fileName)!;
|
|
18
|
-
const tsDiagnostics = diagnostics.map((diagnostic) =>
|
|
17
|
+
const tsDiagnostics = diagnostics.map((diagnostic) =>
|
|
18
|
+
convertDiagnosticWithLocation(diagnostic, () => sourceFile),
|
|
19
|
+
);
|
|
19
20
|
prior.push(...tsDiagnostics);
|
|
20
21
|
}
|
|
21
22
|
return prior;
|
|
22
23
|
};
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
-
function convertDiagnostic(diagnostic: SyntacticDiagnostic, sourceFile: ts.SourceFile): ts.DiagnosticWithLocation {
|
|
26
|
-
const start = ts.getPositionOfLineAndCharacter(sourceFile, diagnostic.start.line - 1, diagnostic.start.column - 1);
|
|
27
|
-
const length =
|
|
28
|
-
diagnostic.end ?
|
|
29
|
-
ts.getPositionOfLineAndCharacter(sourceFile, diagnostic.end.line - 1, diagnostic.end.column - 1) - start
|
|
30
|
-
: 1;
|
|
31
|
-
return {
|
|
32
|
-
file: sourceFile,
|
|
33
|
-
start,
|
|
34
|
-
category: convertErrorCategory(diagnostic.category),
|
|
35
|
-
length,
|
|
36
|
-
messageText: diagnostic.text,
|
|
37
|
-
code: TS_ERROR_CODE_FOR_CMK_ERROR,
|
|
38
|
-
};
|
|
39
|
-
}
|