microsoft / vscode

Visual Studio Code
https://code.visualstudio.com
MIT License
164.38k stars 29.32k forks source link

Command property doesn't seem to be working in Inline Completions #125332

Closed TylerLeonhardt closed 3 years ago

TylerLeonhardt commented 3 years ago

Testing #124979

Here's my code. The command code does not get executed:

import * as vscode from 'vscode';

export class LoremInlineCompletionItemProvider implements vscode.InlineCompletionItemProvider {
    public static documentSelector: vscode.DocumentSelector = {
        language: "markdown"
    };

    private static allSuggestions = [
        'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nunc lobortis mattis aliquam faucibus purus in massa tempor nec. Ipsum dolor sit amet consectetur. Ullamcorper morbi tincidunt ornare massa eget egestas purus. Risus nullam eget felis eget nunc lobortis mattis aliquam.',
        `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Praesent elementum facilisis leo vel fringilla est ullamcorper. Nec nam aliquam sem et. Arcu bibendum at varius vel pharetra vel turpis nunc. Id semper risus in hendrerit gravida rutrum quisque. At risus viverra adipiscing at in. Platea dictumst quisque sagittis purus. Nisl nunc mi ipsum faucibus vitae aliquet nec ullamcorper. Est ultricies integer quis auctor elit sed. Diam quam nulla porttitor massa id neque aliquam vestibulum. Commodo ullamcorper a lacus vestibulum sed arcu non odio. Suspendisse in est ante in nibh mauris cursus mattis molestie.

Magna sit amet purus gravida quis blandit turpis cursus. Commodo quis imperdiet massa tincidunt nunc pulvinar sapien et. Aliquam etiam erat velit scelerisque in dictum non. Aliquet sagittis id consectetur purus ut. Non enim praesent elementum facilisis. Libero volutpat sed cras ornare arcu dui vivamus arcu felis. Leo integer malesuada nunc vel risus commodo. Mus mauris vitae ultricies leo integer malesuada nunc. Tristique risus nec feugiat in fermentum. Morbi tristique senectus et netus et malesuada fames. Vulputate mi sit amet mauris. Adipiscing tristique risus nec feugiat in fermentum. A arcu cursus vitae congue mauris. At ultrices mi tempus imperdiet nulla malesuada pellentesque elit. Tincidunt nunc pulvinar sapien et. Enim ut sem viverra aliquet eget sit.`,
        `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Volutpat consequat mauris nunc congue nisi vitae suscipit tellus mauris. Enim facilisis gravida neque convallis. Commodo elit at imperdiet dui accumsan sit amet nulla. In est ante in nibh mauris cursus mattis molestie a. Sit amet facilisis magna etiam. Et pharetra pharetra massa massa ultricies mi. Elementum pulvinar etiam non quam lacus suspendisse faucibus interdum posuere. Risus in hendrerit gravida rutrum quisque non tellus orci ac. Risus ultricies tristique nulla aliquet.

Facilisi cras fermentum odio eu feugiat pretium. Sed sed risus pretium quam vulputate dignissim suspendisse in. Tellus orci ac auctor augue mauris augue neque. Dolor purus non enim praesent elementum facilisis leo vel fringilla. Quis imperdiet massa tincidunt nunc pulvinar sapien et ligula. Proin libero nunc consequat interdum varius. Nisl nisi scelerisque eu ultrices vitae auctor eu augue ut. Fermentum odio eu feugiat pretium nibh ipsum consequat. Sapien eget mi proin sed libero enim sed faucibus turpis. Eu lobortis elementum nibh tellus molestie nunc non blandit. Dictum varius duis at consectetur lorem donec massa sapien faucibus. Et egestas quis ipsum suspendisse ultrices gravida dictum. Consequat semper viverra nam libero justo laoreet sit amet cursus. Euismod lacinia at quis risus sed vulputate odio ut. Ullamcorper a lacus vestibulum sed arcu non odio euismod lacinia. Tortor at risus viverra adipiscing. Diam vel quam elementum pulvinar. Congue quisque egestas diam in.

Ut aliquam purus sit amet luctus venenatis lectus magna. Eu non diam phasellus vestibulum lorem. Arcu cursus vitae congue mauris rhoncus aenean vel elit. Sed odio morbi quis commodo odio aenean sed. Nunc sed velit dignissim sodales ut eu sem integer vitae. A scelerisque purus semper eget duis. Sit amet est placerat in. Nisi est sit amet facilisis magna. Placerat orci nulla pellentesque dignissim. Sed id semper risus in hendrerit gravida. Purus in massa tempor nec feugiat nisl pretium fusce. Risus commodo viverra maecenas accumsan. Diam donec adipiscing tristique risus nec feugiat in fermentum. Lacus viverra vitae congue eu consequat ac.

Eget sit amet tellus cras adipiscing enim eu turpis. Amet facilisis magna etiam tempor. Ipsum dolor sit amet consectetur adipiscing elit duis tristique. Dui faucibus in ornare quam viverra orci. Neque gravida in fermentum et sollicitudin ac orci phasellus egestas. Felis bibendum ut tristique et egestas. Tellus integer feugiat scelerisque varius morbi enim. Ut faucibus pulvinar elementum integer enim. Orci a scelerisque purus semper eget duis at tellus. Sit amet dictum sit amet justo donec. Convallis posuere morbi leo urna molestie at. Diam maecenas ultricies mi eget. Blandit turpis cursus in hac habitasse platea dictumst quisque. Bibendum enim facilisis gravida neque convallis a. Erat nam at lectus urna duis convallis convallis. Ornare lectus sit amet est. Quam nulla porttitor massa id neque aliquam vestibulum morbi blandit.

Nulla aliquet enim tortor at auctor urna. Varius morbi enim nunc faucibus a pellentesque sit amet. Pellentesque sit amet porttitor eget dolor. Vestibulum lorem sed risus ultricies tristique nulla aliquet. Orci eu lobortis elementum nibh tellus molestie nunc non. Euismod nisi porta lorem mollis aliquam ut porttitor leo. Convallis convallis tellus id interdum velit laoreet id. Commodo ullamcorper a lacus vestibulum. Placerat vestibulum lectus mauris ultrices eros in cursus turpis. Massa eget egestas purus viverra accumsan in nisl. Morbi quis commodo odio aenean sed adipiscing diam. Diam sollicitudin tempor id eu nisl nunc mi. Scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus.`,
    ];

    constructor() {
        vscode.commands.registerCommand("hellooo.hellooo", (args) => {
            vscode.window.showInformationMessage(args || "asdf");
        });
    }

    provideInlineCompletionItems(document: vscode.TextDocument, position: vscode.Position, context: vscode.InlineCompletionContext, token: vscode.CancellationToken): vscode.ProviderResult<vscode.InlineCompletionList<vscode.InlineCompletionItem> | vscode.InlineCompletionItem[]> {
        const text = document.getText(document.getWordRangeAtPosition(position));
        if (!text || !text.startsWith('Lorem')) {
            return [];
        }

        return LoremInlineCompletionItemProvider.allSuggestions.map(s => { return <vscode.InlineCompletionItem>{ text: s, command: {
            command: 'hellooo.hellooo',
            title: 'do this',
            arguments: ['> HII'],
            tooltip: 'asdfasdf'
        } }});
    }
}

Also curious about where the title and tooltips are displayed.

hediet commented 3 years ago

Nice catch! And what a nasty bug.

I only tested commands without args and they worked. However, if you use arguments, they get disposed in the extension host when the cache is cleared. Unfortunately, the cache was cleared immediately after the command is invoked. This was enough to make the commands not work.