Skip to content

Commit f01e32a

Browse files
committed
Modify info.languageServiceHost in place
1 parent da84145 commit f01e32a

File tree

3 files changed

+43
-35
lines changed

3 files changed

+43
-35
lines changed

package-lock.json

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "typescript-yaml-plugin",
3-
"version": "1.0.5",
3+
"version": "1.0.6",
44
"description": "TypeScript Language Service plugin for YAML",
55
"keywords": ["typescript", "ts", "typescript-5", "ts-5", "yaml", "yml", "plugin", "language-service", "intellisense", "autocomplete"],
66
"author": "João Cabral Pinto",

src/index.ts

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,39 @@ import YAML from 'yaml';
66
export = ({ typescript: ts_ }: { typescript: typeof ts }) => ({
77
create: (info: ts.server.PluginCreateInfo) => {
88
const logger = info.project.projectService.logger;
9-
const languageServiceHost = {
10-
getScriptKind: filename => {
11-
if (!info.languageServiceHost.getScriptKind) return ts_.ScriptKind.Unknown;
12-
if (/\.ya?ml$/.test(filename)) return ts_.ScriptKind.TS;
13-
return info.languageServiceHost.getScriptKind(filename);
14-
},
15-
getScriptSnapshot: filename => {
16-
if (!/\.ya?ml$/.test(filename))
17-
return info.languageServiceHost.getScriptSnapshot(filename);
18-
const content = fs.readFileSync(filename, 'utf8');
19-
let object;
20-
try {
21-
object = YAML.parse(content);
22-
} catch (error) {
23-
logger.info(`[typescript-plugin-yaml] YAML.parse error:\n${error}`);
24-
}
25-
const text = `export default ${JSON.stringify(object)};`;
26-
return ts_.ScriptSnapshot.fromString(text);
27-
},
28-
resolveModuleNameLiterals: (moduleLiterals, containingFile, ...rest) =>
29-
info.languageServiceHost.resolveModuleNameLiterals!(
30-
moduleLiterals,
31-
containingFile,
32-
...rest
33-
).map((resolvedModule, index) => {
9+
const languageServiceHost = info.languageServiceHost;
10+
11+
const getScriptKind = languageServiceHost.getScriptKind?.bind(languageServiceHost);
12+
languageServiceHost.getScriptKind = filename => {
13+
if (!getScriptKind) return ts_.ScriptKind.Unknown;
14+
if (/\.ya?ml$/.test(filename)) return ts_.ScriptKind.TS;
15+
return getScriptKind(filename);
16+
};
17+
18+
const getScriptSnapshot =
19+
languageServiceHost.getScriptSnapshot.bind(languageServiceHost);
20+
languageServiceHost.getScriptSnapshot = filename => {
21+
if (!/\.ya?ml$/.test(filename)) return getScriptSnapshot(filename);
22+
const content = fs.readFileSync(filename, 'utf8');
23+
let object;
24+
try {
25+
object = YAML.parse(content);
26+
} catch (error) {
27+
logger.info(`[typescript-plugin-yaml] YAML.parse error:\n${error}`);
28+
}
29+
const text = `export default ${JSON.stringify(object)};`;
30+
return ts_.ScriptSnapshot.fromString(text);
31+
};
32+
33+
const resolveModuleNameLiterals =
34+
languageServiceHost.resolveModuleNameLiterals!.bind(languageServiceHost);
35+
languageServiceHost.resolveModuleNameLiterals = (
36+
moduleLiterals,
37+
containingFile,
38+
...rest
39+
) =>
40+
resolveModuleNameLiterals(moduleLiterals, containingFile, ...rest).map(
41+
(resolvedModule, index) => {
3442
const moduleName = moduleLiterals[index].text;
3543
if (!/\.ya?ml$/.test(moduleName)) return resolvedModule;
3644
return {
@@ -41,12 +49,9 @@ export = ({ typescript: ts_ }: { typescript: typeof ts }) => ({
4149
resolvedFileName: path.resolve(path.dirname(containingFile), moduleName)
4250
}
4351
};
44-
})
45-
} as Partial<ts.LanguageServiceHost>;
46-
const languageServiceHostProxy = new Proxy(info.languageServiceHost, {
47-
get: (target, key: keyof ts.LanguageServiceHost) =>
48-
languageServiceHost[key] ? languageServiceHost[key] : target[key]
49-
});
50-
return ts_.createLanguageService(languageServiceHostProxy);
52+
}
53+
);
54+
55+
return info.languageService;
5156
}
5257
});

0 commit comments

Comments
 (0)