文件扩展名数据库到文件类型/语言映射

问题描述 投票:0回答:1

vscode使用很好的模式将文件扩展名映射到语言:

https://code.visualstudio.com/docs/languages/identifiers

   "files.associations": {
        "*.myphp": "php"
    }

    "languages": [{
        "id": "java",
        "extensions": [ ".java", ".jav" ],
        "aliases": [ "Java", "java" ]
    }]

[prissjs之类的工具具有对数百种语言的内置支持。

但是我在任何地方都找不到语言映射的通用扩展数据库。请注意,我不在乎mime类型。就我而言,我想要一个内置的(实际上,最好是从webapi驱动)映射集。

我已经搜索了vscode,找到了处理其处理的映射的代码(/src/vs/editor/common/services/languagesRegistry.ts),但它似乎是从已安装的扩展中加载映射的。

IOW,我想使用上述模式以及prismjs支持的所有199种语言来生成(或查找!)JSON文档。

有什么建议吗?

visual-studio-code programming-languages vscode-settings file-extension prismjs
1个回答
0
投票

lang-map,nodejs模块使从文件扩展名到语言或从语言到支持的扩展名都很容易。

https://github.com/jonschlinkert/lang-map

我已经成功地使用它使用vscode模式来生成JSON文档。

可能不是很漂亮(不是javascript专业人士,但它可以正常工作:

// Imports file-extension to langauge mapping from both
// prismjs and lang-map and outputs a JSDON document that
// follows the vscode schema for extension mapping.
// PrismJS language definitions trump for my solution.
const fs = require('fs');
var map = require('lang-map');
var components = require('prismjs/components.js');

// vscode files.associations is not an array. Use a dictionary instead.
var assocDict = {};
var languages = [];

for (var key in components.languages) {
    if (components.languages.hasOwnProperty(key) && key != 'meta') {
        var language = components.languages[key];
        var langTemp = {
          id : key
        };

        // vscode doesn't support title, but I want to use it
        if (typeof language.title != 'undefined')
            langTemp.title = language.title;

        if (typeof language.alias != 'undefined'){
            if (Array.isArray(language.alias)){
                langTemp.aliases = language.alias;
            }
            else{
                langTemp.aliases = ['.' + language.alias];
            }
        }
        var extensions = [];
        map.extensions(key).forEach(ext =>{
            // Add it to the extnsions for this langauge defn
            extensions.push('.' + ext);

            // also add it to the files.associations dictionary
            var pattern = '*.' + ext;
            var assoc = { 
                pattern : key
            };
            assocDict[pattern] = key;
        });
        langTemp.extensions = extensions;
        languages.push(langTemp);
    }
}

// create JSON doc conforming to vscode spec. associations is not an array
// languages is
var output = { 
    'files.associations' : assocDict,
    'languages' : languages
};

var file = "../winforms/WinPrint.Core/Properties/languages.json";
fs.writeFile(file, JSON.stringify(output, null, '  '), function (err) {
    if (err) {
        return console.log(err);
    }
    console.log("Wrote " + Object.keys(assocDict).length + " file-type associations and " + languages.length + " language defs to " + file);
});


© www.soinside.com 2019 - 2024. All rights reserved.