@css-modules-kit/ts-plugin 0.1.0 → 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.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/language-plugin.d.ts +2 -2
- package/dist/language-plugin.d.ts.map +1 -1
- package/dist/language-plugin.js +15 -4
- 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/package.json +1 -1
- package/src/index.ts +2 -2
- package/src/language-plugin.ts +15 -4
- package/src/language-service/feature/completion.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -34,7 +34,7 @@ const plugin = (0, createLanguageServicePlugin_js_1.createLanguageServicePlugin)
|
|
|
34
34
|
const resolver = (0, core_1.createResolver)(config.compilerOptions, moduleResolutionCache);
|
|
35
35
|
const matchesPattern = (0, core_1.createMatchesPattern)(config);
|
|
36
36
|
return {
|
|
37
|
-
languagePlugins: [(0, language_plugin_js_1.
|
|
37
|
+
languagePlugins: [(0, language_plugin_js_1.createCSSLanguagePlugin)(resolver, matchesPattern)],
|
|
38
38
|
setup: (language) => {
|
|
39
39
|
info.languageService = (0, proxy_js_1.proxyLanguageService)(language, info.languageService, info.project, resolver, matchesPattern);
|
|
40
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,6 +1,6 @@
|
|
|
1
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]: {
|
|
@@ -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,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,
|
|
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, {
|
|
@@ -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"}
|
package/package.json
CHANGED
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) => {
|
|
@@ -38,7 +38,7 @@ const plugin = createLanguageServicePlugin((ts, info) => {
|
|
|
38
38
|
const matchesPattern = createMatchesPattern(config);
|
|
39
39
|
|
|
40
40
|
return {
|
|
41
|
-
languagePlugins: [
|
|
41
|
+
languagePlugins: [createCSSLanguagePlugin(resolver, matchesPattern)],
|
|
42
42
|
setup: (language) => {
|
|
43
43
|
info.languageService = proxyLanguageService(
|
|
44
44
|
language,
|
package/src/language-plugin.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { LanguagePlugin, SourceScript, VirtualCode } from '@volar/language-
|
|
|
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
|
|
|
@@ -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);
|
|
@@ -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
|
}
|