Files
test-repo/src/support.js
T
Lucas Azzola e436adae04 Implement getSupportInfo() and use it for inference (#3033)
* Implement getSupportInfo() and use it for inference

* Add comment with source of languages.yml

* Fix build, pin semver

* Simplify test snapshots

* Remove stray 'type' property

* Fix parser being overwritten

* Don't infer unreleased parser from extension

* Add CLI and docs for support info
2017-11-03 18:06:25 +11:00

217 lines
4.6 KiB
JavaScript

"use strict";
const semver = require("semver");
const currentVersion = require("../package.json").version;
// Based on:
// https://github.com/github/linguist/blob/master/lib/linguist/languages.yml
const supportTable = [
{
name: "JavaScript",
since: "0.0.0",
parsers: ["babylon", "flow"],
group: "JavaScript",
tmScope: "source.js",
aceMode: "javascript",
codemirrorMode: "javascript",
codemirrorMimeType: "text/javascript",
aliases: ["js", "node"],
extensions: [
".js",
"._js",
".bones",
".es",
".es6",
".frag",
".gs",
".jake",
".jsb",
".jscad",
".jsfl",
".jsm",
".jss",
".mjs",
".njs",
".pac",
".sjs",
".ssjs",
".xsjs",
".xsjslib"
],
filenames: ["Jakefile"],
linguistLanguageId: 183,
vscodeLanguageIds: ["javascript"]
},
{
name: "JSX",
since: "0.0.0",
parsers: ["babylon", "flow"],
group: "JavaScript",
extensions: [".jsx"],
tmScope: "source.js.jsx",
aceMode: "javascript",
codemirrorMode: "jsx",
codemirrorMimeType: "text/jsx",
liguistLanguageId: 178,
vscodeLanguageIds: ["javascriptreact"]
},
{
name: "TypeScript",
since: "1.4.0",
parsers: ["typescript"],
group: "JavaScript",
aliases: ["ts"],
extensions: [".ts", ".tsx"],
tmScope: "source.ts",
aceMode: "typescript",
codemirrorMode: "javascript",
codemirrorMimeType: "application/typescript",
liguistLanguageId: 378,
vscodeLanguageIds: ["typescript", "typescriptreact"]
},
{
name: "CSS",
since: "1.4.0",
parsers: ["css"],
group: "CSS",
tmScope: "source.css",
aceMode: "css",
codemirrorMode: "css",
codemirrorMimeType: "text/css",
extensions: [".css"],
liguistLanguageId: 50,
vscodeLanguageIds: ["css"]
},
{
name: "Less",
since: "1.4.0",
parsers: ["less"],
group: "CSS",
extensions: [".less"],
tmScope: "source.css.less",
aceMode: "less",
codemirrorMode: "css",
codemirrorMimeType: "text/css",
liguistLanguageId: 198,
vscodeLanguageIds: ["less"]
},
{
name: "SCSS",
since: "1.4.0",
parsers: ["scss"],
group: "CSS",
tmScope: "source.scss",
aceMode: "scss",
codemirrorMode: "css",
codemirrorMimeType: "text/x-scss",
extensions: [".scss"],
liguistLanguageId: 329,
vscodeLanguageIds: ["scss"]
},
{
name: "GraphQL",
since: "1.5.0",
parsers: ["graphql"],
extensions: [".graphql", ".gql"],
tmScope: "source.graphql",
aceMode: "text",
liguistLanguageId: 139,
vscodeLanguageIds: ["graphql"]
},
{
name: "JSON",
since: "1.5.0",
parsers: ["json"],
group: "JavaScript",
tmScope: "source.json",
aceMode: "json",
codemirrorMode: "javascript",
codemirrorMimeType: "application/json",
extensions: [
".json",
".json5",
".geojson",
".JSON-tmLanguage",
".topojson"
],
filenames: [
".arcconfig",
".jshintrc",
".babelrc",
".eslintrc",
".prettierrc",
"composer.lock",
"mcmod.info"
],
linguistLanguageId: 174,
vscodeLanguageIds: ["json"]
},
{
name: "Markdown",
since: "1.8.0",
parsers: ["markdown"],
aliases: ["pandoc"],
aceMode: "markdown",
codemirrorMode: "gfm",
codemirrorMimeType: "text/x-gfm",
wrap: true,
extensions: [
".md",
".markdown",
".mdown",
".mdwn",
".mkd",
".mkdn",
".mkdown",
".ron",
".workbook"
],
filenames: ["README"],
tmScope: "source.gfm",
linguistLanguageId: 222,
vscodeLanguageIds: ["markdown"]
},
{
name: "HTML",
since: undefined, // unreleased
parsers: ["parse5"],
group: "HTML",
tmScope: "text.html.basic",
aceMode: "html",
codemirrorMode: "htmlmixed",
codemirrorMimeType: "text/html",
aliases: ["xhtml"],
extensions: [".html", ".htm", ".html.hl", ".inc", ".st", ".xht", ".xhtml"],
linguistLanguageId: 146,
vscodeLanguageIds: ["html"]
}
];
function getSupportInfo(version) {
if (!version) {
version = currentVersion;
}
const usePostCssParser = semver.lt(version, "1.7.1");
const languages = supportTable
.filter(language => language.since && semver.gte(version, language.since))
.map(language => {
if (usePostCssParser && language.group === "CSS") {
return Object.assign({}, language, {
parsers: ["postcss"]
});
}
return language;
});
return { languages };
}
module.exports = {
supportTable,
getSupportInfo
};