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文档。
有什么建议吗?
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);
});