mirror of
https://github.com/microsoft/vscode-extension-samples.git
synced 2026-04-27 16:55:44 +08:00
update smart template string sample
This commit is contained in:
@ -22,7 +22,9 @@
|
||||
"postinstall": "node ./node_modules/vscode/bin/install && tsc -p ./"
|
||||
},
|
||||
"dependencies": {
|
||||
"typescript": "^2.2.1"
|
||||
"typescript": "^2.2.1",
|
||||
"vscode-html-languageservice": "^2.0.1",
|
||||
"vscode-languageserver-types": "^3.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vscode": "^1.0.0",
|
||||
|
||||
@ -2,9 +2,14 @@
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import * as ts from 'typescript';
|
||||
import * as html from 'vscode-html-languageservice';
|
||||
import { TextDocument, Position } from 'vscode-languageserver-types';
|
||||
|
||||
export function activate(context: vscode.ExtensionContext) {
|
||||
|
||||
// create and keep html language service
|
||||
const service = html.getLanguageService();
|
||||
|
||||
vscode.languages.registerCompletionItemProvider(['typescript', 'javascript'], {
|
||||
provideCompletionItems(doc, pos) {
|
||||
|
||||
@ -22,17 +27,22 @@ export function activate(context: vscode.ExtensionContext) {
|
||||
}
|
||||
|
||||
if (!template
|
||||
|| template.tag.getText() !== 'foo'
|
||||
|| template.tag.getText() !== 'html'
|
||||
|| (offset < template.template.pos && offset > template.template.end)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
return [
|
||||
new vscode.CompletionItem('bar', vscode.CompletionItemKind.Value),
|
||||
new vscode.CompletionItem('baz', vscode.CompletionItemKind.Value),
|
||||
new vscode.CompletionItem('far', vscode.CompletionItemKind.Value)
|
||||
];
|
||||
const content = template.template.getText().slice(1, -1);
|
||||
const embeddedDoc = TextDocument.create(doc.uri.with({ scheme: 'html-fake' }).toString(), 'html', doc.version, content);
|
||||
const htmlDoc = service.parseHTMLDocument(embeddedDoc);
|
||||
|
||||
const list = service.doComplete(embeddedDoc, Position.create(0, offset - template.template.pos - 1), htmlDoc);
|
||||
|
||||
return list.items.map(item => {
|
||||
// translate to vscode items
|
||||
return new vscode.CompletionItem(item.label);
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user