@@ -2,8 +2,9 @@ import type { CMKConfig } from '@css-modules-kit/core';
22import { createMatchesPattern , createResolver , readConfigFile } from '@css-modules-kit/core' ;
33import { TsConfigFileNotFoundError } from '@css-modules-kit/core' ;
44import { createLanguageServicePlugin } from '@volar/typescript/lib/quickstart/createLanguageServicePlugin.js' ;
5- import { createCSSLanguagePlugin } from './language-plugin.js' ;
5+ import { CMK_DATA_KEY , createCSSLanguagePlugin , isCSSModuleScript } from './language-plugin.js' ;
66import { proxyLanguageService } from './language-service/proxy.js' ;
7+ import type { DocumentLink } from './type.js' ;
78
89const plugin = createLanguageServicePlugin ( ( ts , info ) => {
910 if ( info . project . projectKind !== ts . server . ProjectKind . Configured ) {
@@ -15,6 +16,7 @@ const plugin = createLanguageServicePlugin((ts, info) => {
1516 info . project . projectService . logger . info ( '[@css-modules-kit/ts-plugin] info: Session is not available' ) ;
1617 return { languagePlugins : [ ] } ;
1718 }
19+ const session = info . session ;
1820
1921 let config : CMKConfig ;
2022 try {
@@ -55,17 +57,6 @@ const plugin = createLanguageServicePlugin((ts, info) => {
5557 const resolver = createResolver ( config . compilerOptions , moduleResolutionCache ) ;
5658 const matchesPattern = createMatchesPattern ( config ) ;
5759
58- info . session . addProtocolHandler ( '_css-modules-kit:rename' , ( request ) => {
59- const { fileName, position } = request . arguments ;
60- const result = info . languageService . findRenameLocations ( fileName , position , false , false , { } ) ;
61- return { response : { result } } ;
62- } ) ;
63- info . session . addProtocolHandler ( '_css-modules-kit:renameInfo' , ( request ) => {
64- const { fileName, position } = request . arguments ;
65- const result = info . languageService . getRenameInfo ( fileName , position , { } ) ;
66- return { response : { result } } ;
67- } ) ;
68-
6960 return {
7061 languagePlugins : [ createCSSLanguagePlugin ( resolver , matchesPattern , config ) ] ,
7162 setup : ( language ) => {
@@ -77,6 +68,33 @@ const plugin = createLanguageServicePlugin((ts, info) => {
7768 matchesPattern ,
7869 config ,
7970 ) ;
71+ session . addProtocolHandler ( '_css-modules-kit:rename' , ( request ) => {
72+ const { fileName, position } = request . arguments ;
73+ const result = info . languageService . findRenameLocations ( fileName , position , false , false , { } ) ;
74+ return { response : { result } } ;
75+ } ) ;
76+ session . addProtocolHandler ( '_css-modules-kit:renameInfo' , ( request ) => {
77+ const { fileName, position } = request . arguments ;
78+ const result = info . languageService . getRenameInfo ( fileName , position , { } ) ;
79+ return { response : { result } } ;
80+ } ) ;
81+ session . addProtocolHandler ( '_css-modules-kit:documentLink' , ( request ) => {
82+ const { fileName } = request . arguments ;
83+ const script = language . scripts . get ( fileName ) ;
84+ const links : DocumentLink [ ] = [ ] ;
85+ if ( isCSSModuleScript ( script ) ) {
86+ const { tokenImporters } = script . generated . root [ CMK_DATA_KEY ] . cssModule ;
87+ for ( const { from, fromLoc } of tokenImporters ) {
88+ const resolved = resolver ( from , { request : fileName } ) ;
89+ if ( ! resolved ) continue ;
90+ links . push ( {
91+ fileName : resolved ,
92+ textSpan : { start : fromLoc . start . offset , length : fromLoc . end . offset - fromLoc . start . offset } ,
93+ } ) ;
94+ }
95+ }
96+ return { response : { result : links } } ;
97+ } ) ;
8098 } ,
8199 } ;
82100} ) ;
0 commit comments