private getCompletionItemsFromTerminalNode()

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