in src/mongo/services/completionItemProvider.ts [190:219]
private getCompletionItemsFromTerminalNode(node: TerminalNode): Promise<CompletionItem[]> {
if (node._symbol.type === mongoParser.mongoParser.DB) {
return this.thenable(this.createDbKeywordCompletion(this.createRange(node)));
}
if (node._symbol.type === mongoParser.mongoParser.SEMICOLON) {
return this.thenable(this.createDbKeywordCompletion(this.createRangeAfter(node)));
}
if (node._symbol.type === mongoParser.mongoParser.DOT) {
const previousNode = this.getPreviousNode(node);
if (previousNode && previousNode instanceof TerminalNode) {
if (previousNode._symbol.type === mongoParser.mongoParser.DB) {
return Promise.all([this.createCollectionCompletions(this.createRangeAfter(node)), this.createDbFunctionCompletions(this.createRangeAfter(node))])
.then(([collectionCompletions, dbFunctionCompletions]) => [...collectionCompletions, ...dbFunctionCompletions]);
}
}
if (previousNode instanceof mongoParser.CollectionContext) {
return this.createCollectionFunctionsCompletions(this.createRangeAfter(node));
}
}
if (node instanceof ErrorNode) {
const previousNode = this.getPreviousNode(node);
if (previousNode) {
if (previousNode instanceof TerminalNode) {
return this.getCompletionItemsFromTerminalNode(previousNode);
}
return previousNode.accept(this);
}
}
return this.thenable();
}