update smart template string sample

This commit is contained in:
Johannes Rieken
2017-03-24 16:36:10 +01:00
parent c755cf9491
commit b7043bdc24
2 changed files with 19 additions and 7 deletions

View File

@ -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",

View File

@ -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);
})
}
});
}