Theia API Documentation v1.65.0
    Preparing search index...

    Module @theia/variable-resolver


    theia-ext-logo

    ECLIPSE THEIA - VARIABLE-RESOLVER EXTENSION


    The @theia/variable-resolved extension provides variable substitution mechanism inside of strings using ${variableName} syntax.

    Extension provides a hook that allows any extensions to contribute its own variables. Here's the example of contributing two variables:

    • ${file} - returns the name of the file opened in the current editor
    • ${lineNumber} - returns the current line number in the current file
    @injectable()
    export class EditorVariableContribution implements VariableContribution {

    constructor(
    @inject(EditorManager) protected readonly editorManager: EditorManager
    ) { }

    registerVariables(variables: VariableRegistry): void {
    variables.registerVariable({
    name: 'file',
    description: 'The name of the file opened in the current editor',
    resolve: () => {
    const currentEditor = this.getCurrentEditor();
    if (currentEditor) {
    return currentEditor.uri.displayName;
    }
    return undefined;
    }
    });
    variables.registerVariable({
    name: 'lineNumber',
    description: 'The current line number in the current file',
    resolve: () => {
    const currentEditor = this.getCurrentEditor();
    if (currentEditor) {
    return `${currentEditor.cursor.line + 1}`;
    }
    return undefined;
    }
    });
    }

    protected getCurrentEditor(): TextEditor | undefined {
    const currentEditor = this.editorManager.currentEditor;
    if (currentEditor) {
    return currentEditor.editor;
    }
    return undefined;
    }
    }

    Note that a Variable is resolved to MaybePromise<string | undefined> which means that it can be resolved synchronously or within a Promise.

    There's the example of how one can use Variable Resolver Service in its own plugin:

    @injectable()
    export class MyService {

    constructor(
    @inject(VariableResolverService) protected readonly variableResolver: VariableResolverService
    ) { }

    async resolve(): Promise<void> {
    const text = 'cursor is in file ${file} on line ${lineNumber}';
    const resolved = await this.variableResolver.resolve(text);
    console.log(resolved);
    }
    }

    If package.json file is currently opened and cursor is on line 5 then the following output will be logged to the console:

    cursor is in file package.json on line 5
    

    "Theia" is a trademark of the Eclipse Foundation https://www.eclipse.org/theia

    Theia - Variable Resolver Extension

    The extension

    Modules

    browser
    browser/common-variable-contribution
    browser/variable
    browser/variable-input
    browser/variable-input-schema
    browser/variable-quick-open-service
    browser/variable-resolver-frontend-contribution
    browser/variable-resolver-frontend-module
    browser/variable-resolver-service
    common/variable-types