【问题标题】:Monaco Editor change IntelliSense BehaviourMonaco Editor 更改 IntelliSense 行为
【发布时间】:2018-09-04 16:37:04
【问题描述】:

我正在试验 CompletionItemProvider,我有两个 CompletionItemProvider。一个在所有字母上触发,另一个在用户键入单引号字符 (') 时触发。

但我的目标是在双引号内,例如“here inside”,当用户点击 CTRL+SPACE 来激活 IntelliSense 时,他只能访问请参阅特定的完成提供程序,例如下面的内容。那可能吗 ?

// should only trigger inside quotes
public areaCompletionProvider = <monaco.languages.CompletionItemProvider>{
    triggerCharacters: ['\''],
    provideCompletionItems: (model, position, token) => {
        let current = this.store[this.store.length - 1];
        if (!current) {
            return [];
        }

        let uniqueContextVariables: string[] = Array.from(new Set(current.contextVariables.map(ctxVariable => ctxVariable.area)));
        let areaCompletions = uniqueContextVariables.map(area => <monaco.languages.CompletionItem>{
            label: area,
            kind: monaco.languages.CompletionItemKind.Field,
        });

        return areaCompletions;
    }
};

【问题讨论】:

    标签: typescript monaco-editor


    【解决方案1】:

    我不确定是否有更好的解决方案,但我设法更改了字符串内(两个引号之间)的 IntelliSense 行为 CTRL+SPACE

    我正在使用 findMatches 方法,并在正则表达式的帮助下查看我是否在字符串中。如果是这样,我会返回。

    // This is for completion of context variables and shortcuts
    public variableCompletionProvider = <monaco.languages.CompletionItemProvider>{
        triggerCharacters: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''),
        provideCompletionItems: (model, position, token) => {
    
            // Check if inside string quotes, then don't offer variable completion as inside quotes only area completion should be available
            var quotes = model.findMatches(`'([^'])*'`, true, true, true, null, true);
            if (quotes.length > 0) {
                for (let quote of quotes) {
                    if (quote && (position.column >= quote.range.startColumn && position.column <= quote.range.endColumn)) {
                        return;
                    }
                }
            }
    
             // If I am not inside a string (quotes) then proceed with providing Completion 
             // Some more Code Here ...
    
        }
    };
    

    我不确定我是否可以做得更好。此外,它不适用于跨越更多行的字符串。对于任何建议,我都表示感谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多