Pretter for each ts file

This commit is contained in:
Pine Wu
2018-10-10 09:37:51 -07:00
parent c945fe9288
commit 23674b2cfe
55 changed files with 1755 additions and 1479 deletions

View File

@ -6,44 +6,47 @@ 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();
// create and keep html language service
const service = html.getLanguageService();
vscode.languages.registerCompletionItemProvider(['typescript', 'javascript'], {
provideCompletionItems(doc, pos) {
const offset = doc.offsetAt(pos);
const source = ts.createSourceFile(doc.fileName, doc.getText(), ts.ScriptTarget.Latest, true);
vscode.languages.registerCompletionItemProvider(['typescript', 'javascript'], {
provideCompletionItems(doc, pos) {
let token = (ts as any).getTokenAtPosition(source, offset);
let template: ts.TaggedTemplateExpression;
while (token) {
if (token.kind === ts.SyntaxKind.TaggedTemplateExpression) {
template = token;
break;
}
token = token.parent;
}
const offset = doc.offsetAt(pos);
const source = ts.createSourceFile(doc.fileName, doc.getText(), ts.ScriptTarget.Latest, true);
if (
!template ||
template.tag.getText() !== 'html' ||
(offset < template.template.pos && offset > template.template.end)
) {
return;
}
let token = (ts as any).getTokenAtPosition(source, offset)
let template: ts.TaggedTemplateExpression;
while (token) {
if (token.kind === ts.SyntaxKind.TaggedTemplateExpression) {
template = token;
break;
}
token = token.parent;
}
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);
if (!template
|| template.tag.getText() !== 'html'
|| (offset < template.template.pos && offset > template.template.end)
) {
return;
}
const list = service.doComplete(embeddedDoc, Position.create(0, offset - template.template.pos - 1), htmlDoc);
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);
})
}
});
return list.items.map(item => {
// translate to vscode items
return new vscode.CompletionItem(item.label);
});
}
});
}