使用Theia——添加語言支持

上一篇:使用Theia——建立插件html

Theia——添加語言支持

Theia中TextMate的支持

  使用TextMate語法能夠爲大部分源文件提供精準的着色修飾,雖然這只是在語法級別上(沒有語言自己的深度解析)。語義着色能夠由語言服務器提供。
  TextMate語法主要有兩種格式: .plist.tmLanguage.json,這兩種Theia都支持。
  更多有關TextMate語法的內容能夠查看 這裏
  注意:特定語言的語法應該包含在該語言的專用擴展包中。 @theia/textmate-grammars中只註冊了當前沒有任何特定擴展包的語言。

添加新語法

  要提供一種新語法,一般的作法是在擴展包的根目錄下建立一個 data目錄,在其中保存不一樣的語法。
extension/
    data/
        grammars go here
    lib/
        ...
    src/
        ...
    package.json
    ...

  而後,在package.json文件中聲明如下屬性,這樣新提供的語法能夠與源代碼和編譯的文件一同發佈。json

"files": [
    "data",
    "lib",
    "src"
  ],

  在擴展包中,咱們能夠經過LanguageGrammarDefinitionContribution的contribution point來提供這一特性。服務器

@injectable()
export class YourContribution implements LanguageGrammarDefinitionContribution {

    readonly id = 'languageId';
    readonly scopeName = 'source.yourLanguage';

    registerTextmateLanguage(registry: TextmateRegisty) {
        registry.registerTextmateGrammarScope(this.scopeName, {
            async getGrammarDefinition() {
                return {
                    format: 'json',
                    content: require('../data/yourGrammar.tmLanguage.json'),
                }
            }
        });
        registry.mapLanguageIdToTextmateGrammar(this.id, this.scopeName);
    }
}

  若是使用.plist語法,則不能使用require來直接獲取內容,由於Webpack將返回從服務器獲取的文件的名稱。這種狀況下,能夠使用下面的模式來獲取文件的內容:async

@injectable()
export class YourContribution implements LanguageGrammarDefinitionContribution {

    readonly id = 'languageId';
    readonly scopeName = 'source.yourLanguage';

    registerTextmateLanguage(registry: TextmateRegisty) {
        registry.registerTextmateGrammarScope(this.scopeName, {
            async getGrammarDefinition() {
                const response = await fetch(require('../data/yourGrammar.plist'));
                return {
                    format: 'plist',
                    content: await response.text(),
                }
            }
        });
        registry.mapLanguageIdToTextmateGrammar(this.id, this.scopeName);
    }
}

 

原文地址:https://theia-ide.org/docs/textmateide

相關文章
相關標籤/搜索