Skip to content

Commit 6e643b3

Browse files
committed
feat: use snippet service override
1 parent 0078ad3 commit 6e643b3

File tree

2 files changed

+7
-43
lines changed

2 files changed

+7
-43
lines changed

src/languages/snippets/index.ts

Lines changed: 5 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,7 @@
1-
import * as monaco from 'monaco-editor'
1+
import { setSnippets } from 'vscode/service-override/snippets'
22
import snippetLoader from '../extensions/snippetLoader'
33

4-
class SimpleSnippetService implements monaco.extra.ISnippetsService {
5-
_serviceBrand: undefined
6-
7-
isEnabled (snippet: monaco.extra.Snippet): boolean {
8-
return snippet.snippetIdentifier != null || true
9-
}
10-
11-
updateEnablement (): void {
12-
throw new Error('Method not implemented.')
13-
}
14-
15-
async getSnippets (languageId: string, opt?: monaco.extra.ISnippetGetOptions): Promise<monaco.extra.Snippet[]> {
16-
const result: monaco.extra.Snippet[] = []
17-
const loader = snippetLoader[languageId]
18-
if (loader != null) {
19-
const rawSnippets = await loader()
20-
const snippets = Object.entries(rawSnippets)
21-
.flatMap(([name, value]) => monaco.extra.parseSnippet(name, value, [languageId], 'User Snippet', monaco.extra.SnippetSource.Extension))
22-
monaco.extra.snippetScopeSelect(snippets, languageId, result)
23-
}
24-
return this._filterSnippets(result, opt)
25-
}
26-
27-
getSnippetsSync (): monaco.extra.Snippet[] {
28-
throw new Error('Method not implemented.')
29-
}
30-
31-
private _filterSnippets (snippets: monaco.extra.Snippet[], opts?: monaco.extra.ISnippetGetOptions): monaco.extra.Snippet[] {
32-
return snippets.filter(snippet => {
33-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
34-
return (snippet.prefix != null || (opts?.includeNoPrefixSnippets ?? false)) && // prefix or no-prefix wanted
35-
(this.isEnabled(snippet) || (opts?.includeDisabledSnippets ?? false)) // enabled or disabled wanted
36-
})
37-
}
38-
}
39-
40-
setTimeout(() => {
41-
// In a timeout so the service can be overriden
42-
const languageService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageService)
43-
const languageConfigurationService = monaco.extra.StandaloneServices.get(monaco.languages.ILanguageConfigurationService)
44-
monaco.extra.setSnippetSuggestSupport(new monaco.extra.SnippetCompletionProvider(languageService, new SimpleSnippetService(), languageConfigurationService))
45-
})
4+
setSnippets(Object.keys(snippetLoader).map(language => ({
5+
language,
6+
path: `${language}-snippets.json`
7+
})), async (extensionPoint) => JSON.stringify(await snippetLoader[extensionPoint.language]!()))

src/monaco.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import getConfigurationServiceOverride from 'vscode/service-override/configurati
88
import getKeybindingsServiceOverride from 'vscode/service-override/keybindings'
99
import getTextmateServiceOverride from 'vscode/service-override/textmate'
1010
import getThemeServiceOverride from 'vscode/service-override/theme'
11+
import getSnippetConfigurationServiceOverride from 'vscode/service-override/snippets'
1112
import './worker'
1213
import { createConfiguredEditor, errorHandler } from 'vscode/monaco'
1314
import onigFile from 'vscode-oniguruma/release/onig.wasm'
@@ -35,6 +36,7 @@ StandaloneServices.initialize({
3536
const response = await fetch(onigFile)
3637
return await response.arrayBuffer()
3738
}),
39+
...getSnippetConfigurationServiceOverride(),
3840
...getThemeServiceOverride()
3941
})
4042
// Disable high contrast autodetection because it fallbacks on the hc-black no matter what

0 commit comments

Comments
 (0)