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

Visual studio code 文件扩展名到文件类型/语言映射的数据库,visual-studio-code,programming-languages,vscode-settings,file-extension,prismjs,Visual Studio Code,Programming Languages,Vscode Settings,File Extension,Prismjs,vscode为文件扩展名到语言的映射使用了一个很好的模式: 像prismjs这样的工具内置了对数百种语言的支持 但我在任何地方都找不到语言映射的公共扩展数据库。注意,我不关心mime类型。在我的例子中,我希望有一个内置的映射集(实际上,它最好是由webapi驱动的) 我搜索了vscode,找到了处理它处理的映射的代码(/src/vs/editor/common/services/languagesRegistry.ts),但它似乎是从安装的扩展加载映射的 瞧,我想使用上面的模式生成(或查找!)

vscode为文件扩展名到语言的映射使用了一个很好的模式:

像prismjs这样的工具内置了对数百种语言的支持

但我在任何地方都找不到语言映射的公共扩展数据库。注意,我不关心mime类型。在我的例子中,我希望有一个内置的映射集(实际上,它最好是由webapi驱动的)

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

瞧,我想使用上面的模式生成(或查找!)一个JSON文档,该模式包含prismjs支持的所有199种语言


有什么建议吗?

lang map
,nodejs模块使您可以轻松地从文件扩展名转换为语言或从语言转换为支持的扩展名

我已经成功地使用它使用vscode模式生成了一个JSON文档

可能并不漂亮(不是javascript专业版),但它可以工作:

//将文件扩展名从
//prismjs和lang映射并输出一个JSDON文档
//遵循扩展映射的vscode架构。
//PRISMJ的语言定义胜过我的解决方案。
常数fs=要求('fs');
var-map=require('lang-map');
var components=require('prismjs/components.js');
//vscode files.associations不是数组。改用字典。
var assocDict={};
var语言=[];
for(组件中的var键。语言){
if(components.languages.hasOwnProperty(key)&&key!=“meta”){
var language=components.languages[key];
var langTemp={
id:钥匙
};
//vscode不支持标题,但我想使用它
if(typeof language.title!=“未定义”)
langTemp.title=language.title;
if(typeof language.alias!=“未定义”){
if(Array.isArray(language.alias)){
langTemp.alias=language.alias;
}
否则{
langTemp.alias=['..+language.alias];
}
}
var扩展=[];
map.extensions(key.forEach)(ext=>{
//将其添加到此langauge defn的扩展中
扩展.推送('.'+ext);
//还要将其添加到files.associations字典中
变量模式='*.'+ext;
var assoc={
模式:键
};
assocDict[模式]=键;
});
langTemp.extensions=扩展;
语言推送(langTemp);
}
}
//创建符合vscode规范的JSON文档。关联不是数组
//语言是
变量输出={
“files.associations”:assocDict,
“语言”:语言
};
var file=“../winforms/WinPrint.Core/Properties/languages.json”;
writeFile(文件,JSON.stringify(输出,null.),函数(err){
如果(错误){
返回console.log(err);
}
log(“将”+Object.keys(assocDict).length+“文件类型关联和”+languages.length+“语言定义写入”+文件);
});
我还发现了这个,我可以用它来代替:

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

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