Skip to content

Commit 706f9fb

Browse files
committed
support multiple project
1 parent 41af043 commit 706f9fb

1 file changed

Lines changed: 47 additions & 26 deletions

File tree

packages/ts-plugin/src/index.ts

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -68,33 +68,54 @@ const plugin = createLanguageServicePlugin((ts, info) => {
6868
matchesPattern,
6969
config,
7070
);
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-
});
71+
try {
72+
session.addProtocolHandler('_css-modules-kit:rename', (request) => {
73+
const project = info.project.projectService.getDefaultProjectForFile(
74+
ts.server.toNormalizedPath(request.arguments.fileName),
75+
true,
76+
);
77+
if (!project) {
78+
return { response: { result: [] } };
9479
}
95-
}
96-
return { response: { result: links } };
97-
});
80+
const languageService = project.getLanguageService();
81+
const { fileName, position } = request.arguments;
82+
const result = languageService.findRenameLocations(fileName, position, false, false, {});
83+
return { response: { result } };
84+
});
85+
session.addProtocolHandler('_css-modules-kit:renameInfo', (request) => {
86+
const project = info.project.projectService.getDefaultProjectForFile(
87+
ts.server.toNormalizedPath(request.arguments.fileName),
88+
true,
89+
);
90+
if (!project) {
91+
return { response: { result: { canRename: false, localizedErrorMessage: '' } as const } };
92+
}
93+
const languageService = project.getLanguageService();
94+
const { fileName, position } = request.arguments;
95+
const result = languageService.getRenameInfo(fileName, position, {});
96+
return { response: { result } };
97+
});
98+
session.addProtocolHandler('_css-modules-kit:documentLink', (request) => {
99+
// TODO: Get `language` instance related to `request.arguments.fileName`
100+
const { fileName } = request.arguments;
101+
const script = language.scripts.get(fileName);
102+
const links: DocumentLink[] = [];
103+
if (isCSSModuleScript(script)) {
104+
const { tokenImporters } = script.generated.root[CMK_DATA_KEY].cssModule;
105+
for (const { from, fromLoc } of tokenImporters) {
106+
const resolved = resolver(from, { request: fileName });
107+
if (!resolved) continue;
108+
links.push({
109+
fileName: resolved,
110+
textSpan: { start: fromLoc.start.offset, length: fromLoc.end.offset - fromLoc.start.offset },
111+
});
112+
}
113+
}
114+
return { response: { result: links } };
115+
});
116+
} catch {
117+
console.log('already registered');
118+
}
98119
},
99120
};
100121
});

0 commit comments

Comments
 (0)