|
1 | 1 | import { SelectorCompletionItemProvider } from "./completion"; |
2 | | -import { ExtensionContext, languages, workspace } from "vscode"; |
| 2 | +import { ExtensionContext, languages, TextDocument, TextDocumentChangeEvent, workspace } from "vscode"; |
3 | 3 |
|
4 | 4 | export function activate(context: ExtensionContext) { |
| 5 | + const timeouts = new Map<string, NodeJS.Timeout>(); |
5 | 6 | const config = workspace.getConfiguration("css"); |
6 | 7 | const enabledLanguages = config.get<string[]>("enabledLanguages", ["html"]); |
7 | 8 | const provider = new SelectorCompletionItemProvider(); |
8 | 9 |
|
9 | | - workspace.textDocuments.forEach(document => { |
10 | | - if (enabledLanguages.includes(document.languageId)) { |
11 | | - provider.validate(document); |
12 | | - } |
13 | | - }); |
14 | | - |
15 | | - let timeout: NodeJS.Timeout; |
| 10 | + const validate = (e: TextDocumentChangeEvent | TextDocument) => { |
| 11 | + const document = (e as TextDocumentChangeEvent).document || e; |
16 | 12 |
|
17 | | - context.subscriptions.push( |
18 | | - workspace.onDidOpenTextDocument(document => { |
19 | | - if (enabledLanguages.includes(document.languageId)) { |
20 | | - provider.validate(document); |
21 | | - } |
22 | | - }), |
| 13 | + if (enabledLanguages.includes(document.languageId)) { |
| 14 | + const uri = document.uri.toString(); |
| 15 | + const timeout = timeouts.get(uri); |
23 | 16 |
|
24 | | - workspace.onDidChangeTextDocument(e => { |
25 | | - if (enabledLanguages.includes(e.document.languageId)) { |
| 17 | + if (timeout) { |
26 | 18 | clearTimeout(timeout); |
27 | | - timeout = setTimeout(() => provider.validate(e.document), 500); |
28 | 19 | } |
29 | | - }), |
30 | 20 |
|
31 | | - languages.registerCompletionItemProvider( |
32 | | - enabledLanguages, |
33 | | - provider |
34 | | - ), |
| 21 | + timeouts.set(uri, setTimeout(() => { |
| 22 | + timeouts.delete(uri); |
| 23 | + provider.validate(document); |
| 24 | + }, 500)); |
| 25 | + } |
| 26 | + }; |
35 | 27 |
|
| 28 | + workspace.textDocuments.forEach(validate); |
| 29 | + |
| 30 | + context.subscriptions.push( |
| 31 | + workspace.onDidOpenTextDocument(validate), |
| 32 | + workspace.onDidChangeTextDocument(validate), |
| 33 | + languages.registerCompletionItemProvider(enabledLanguages, provider), |
36 | 34 | provider |
37 | 35 | ); |
38 | 36 | } |
|
0 commit comments