Support isIncomplete form completion results

This commit is contained in:
Martin Aeschlimann
2016-01-25 22:01:17 +01:00
parent e57f5f4078
commit 9f7632cc23
3 changed files with 11 additions and 8 deletions
+8 -5
View File
@@ -12,7 +12,7 @@ import JsonSchema = require('./json-toolbox/jsonSchema');
import nls = require('./utils/nls');
import {IJSONWorkerContribution} from './jsonContributions';
import {CompletionItem, CompletionItemKind, CompletionOptions, ITextDocument, TextDocumentIdentifier, TextDocumentPosition, Range, TextEdit} from 'vscode-languageserver';
import {CompletionItem, CompletionItemKind, CompletionList, CompletionOptions, ITextDocument, TextDocumentIdentifier, TextDocumentPosition, Range, TextEdit} from 'vscode-languageserver';
export interface ISuggestionsCollector {
add(suggestion: CompletionItem): void;
@@ -30,13 +30,16 @@ export class JSONCompletion {
this.contributions = contributions;
}
public doSuggest(document: ITextDocument, textDocumentPosition: TextDocumentPosition, doc: Parser.JSONDocument): Thenable<CompletionItem[]> {
public doSuggest(document: ITextDocument, textDocumentPosition: TextDocumentPosition, doc: Parser.JSONDocument): Thenable<CompletionList> {
let offset = document.offsetAt(textDocumentPosition.position);
let node = doc.getNodeFromOffsetEndInclusive(offset);
let overwriteRange = null;
let result: CompletionItem[] = [];
let result: CompletionList = {
items: [],
isIncomplete: false
}
if (node && (node.type === 'string' || node.type === 'number' || node.type === 'boolean' || node.type === 'null')) {
overwriteRange = Range.create(document.positionAt(node.start), document.positionAt(node.end));
@@ -51,11 +54,11 @@ export class JSONCompletion {
suggestion.textEdit = TextEdit.replace(overwriteRange, suggestion.insertText);
}
result.push(suggestion);
result.items.push(suggestion);
}
},
setAsIncomplete: () => {
result.isIncomplete = true;
},
error: (message: string) => {
console.log(message);
+2 -2
View File
@@ -8,7 +8,7 @@ import {
IPCMessageReader, IPCMessageWriter,
createConnection, IConnection, TextDocumentSyncKind,
TextDocuments, ITextDocument, Diagnostic, DiagnosticSeverity,
InitializeParams, InitializeResult, TextDocumentIdentifier, TextDocumentPosition,
InitializeParams, InitializeResult, TextDocumentIdentifier, TextDocumentPosition, CompletionList,
CompletionItem, CompletionItemKind, Files, Hover, SymbolInformation, TextEdit, DocumentFormattingParams,
DocumentRangeFormattingParams, NotificationType, RequestType
} from 'vscode-languageserver';
@@ -257,7 +257,7 @@ function getJSONDocument(document: ITextDocument): JSONDocument {
return parseJSON(document.getText());
}
connection.onCompletion((textDocumentPosition: TextDocumentPosition): Thenable<CompletionItem[]> => {
connection.onCompletion((textDocumentPosition: TextDocumentPosition): Thenable<CompletionList> => {
let document = documents.get(textDocumentPosition.uri);
let jsonDocument = getJSONDocument(document);
return jsonCompletion.doSuggest(document, textDocumentPosition, jsonDocument);
@@ -40,7 +40,7 @@ suite('JSON Completion', () => {
var document = ITextDocument.create(uri, value);
var textDocumentLocation = TextDocumentPosition.create(uri, Position.create(0, idx));
var jsonDoc = Parser.parse(value);
return completionProvider.doSuggest(document, textDocumentLocation, jsonDoc);
return completionProvider.doSuggest(document, textDocumentLocation, jsonDoc).then(list => list.items);
};