From 56a2cd8a1b809e5f1b9f0f08b0d5bad4bbfd61d1 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Wed, 30 Oct 2019 02:49:44 +0800 Subject: [PATCH] Refactor createLanguage to use function transform (#6676) --- src/language-css/index.js | 38 +++++++------- src/language-graphql/index.js | 8 +-- src/language-handlebars/index.js | 8 +-- src/language-html/index.js | 42 +++++++-------- src/language-js/index.js | 90 +++++++++++++++----------------- src/language-markdown/index.js | 26 ++++----- src/language-yaml/index.js | 8 +-- src/utils/create-language.js | 22 +------- 8 files changed, 104 insertions(+), 138 deletions(-) diff --git a/src/language-css/index.js b/src/language-css/index.js index 36480906..ce51557b 100644 --- a/src/language-css/index.js +++ b/src/language-css/index.js @@ -5,37 +5,35 @@ const options = require("./options"); const createLanguage = require("../utils/create-language"); const languages = [ - createLanguage(require("linguist-languages/data/CSS"), { - override: { + createLanguage(require("linguist-languages/data/CSS"), data => + Object.assign(data, { since: "1.4.0", parsers: ["css"], vscodeLanguageIds: ["css"] - } - }), - createLanguage(require("linguist-languages/data/PostCSS"), { - override: { + }) + ), + createLanguage(require("linguist-languages/data/PostCSS"), data => + Object.assign(data, { since: "1.4.0", parsers: ["css"], - vscodeLanguageIds: ["postcss"] - }, - extend: { - extensions: [".postcss"] - } - }), - createLanguage(require("linguist-languages/data/Less"), { - override: { + vscodeLanguageIds: ["postcss"], + extensions: data.extensions.concat(".postcss") + }) + ), + createLanguage(require("linguist-languages/data/Less"), data => + Object.assign(data, { since: "1.4.0", parsers: ["less"], vscodeLanguageIds: ["less"] - } - }), - createLanguage(require("linguist-languages/data/SCSS"), { - override: { + }) + ), + createLanguage(require("linguist-languages/data/SCSS"), data => + Object.assign(data, { since: "1.4.0", parsers: ["scss"], vscodeLanguageIds: ["scss"] - } - }) + }) + ) ]; const printers = { diff --git a/src/language-graphql/index.js b/src/language-graphql/index.js index 6ace5c01..971e822d 100644 --- a/src/language-graphql/index.js +++ b/src/language-graphql/index.js @@ -5,13 +5,13 @@ const options = require("./options"); const createLanguage = require("../utils/create-language"); const languages = [ - createLanguage(require("linguist-languages/data/GraphQL"), { - override: { + createLanguage(require("linguist-languages/data/GraphQL"), data => + Object.assign(data, { since: "1.5.0", parsers: ["graphql"], vscodeLanguageIds: ["graphql"] - } - }) + }) + ) ]; const printers = { diff --git a/src/language-handlebars/index.js b/src/language-handlebars/index.js index b9142ed1..9a5fa49b 100644 --- a/src/language-handlebars/index.js +++ b/src/language-handlebars/index.js @@ -4,13 +4,13 @@ const printer = require("./printer-glimmer"); const createLanguage = require("../utils/create-language"); const languages = [ - createLanguage(require("linguist-languages/data/Handlebars"), { - override: { + createLanguage(require("linguist-languages/data/Handlebars"), data => + Object.assign(data, { since: null, // unreleased parsers: ["glimmer"], vscodeLanguageIds: ["handlebars"] - } - }) + }) + ) ]; const printers = { diff --git a/src/language-html/index.js b/src/language-html/index.js index 4992d3c2..fc2e81b3 100644 --- a/src/language-html/index.js +++ b/src/language-html/index.js @@ -5,47 +5,43 @@ const createLanguage = require("../utils/create-language"); const options = require("./options"); const languages = [ - createLanguage(require("linguist-languages/data/HTML"), { - override: { + createLanguage(require("linguist-languages/data/HTML"), data => + Object.assign(data, { name: "Angular", since: "1.15.0", parsers: ["angular"], vscodeLanguageIds: ["html"], - extensions: [".component.html"], filenames: [] - } - }), - createLanguage(require("linguist-languages/data/HTML"), { - override: { + }) + ), + createLanguage(require("linguist-languages/data/HTML"), data => + Object.assign(data, { since: "1.15.0", parsers: ["html"], - vscodeLanguageIds: ["html"] - }, - extend: { - extensions: [ + vscodeLanguageIds: ["html"], + extensions: data.extensions.concat([ ".mjml" // MJML is considered XML in Linguist but it should be formatted as HTML - ] - } - }), - createLanguage(require("linguist-languages/data/HTML"), { - override: { + ]) + }) + ), + createLanguage(require("linguist-languages/data/HTML"), data => + Object.assign(data, { name: "Lightning Web Components", since: "1.17.0", parsers: ["lwc"], vscodeLanguageIds: ["html"], - extensions: [], filenames: [] - } - }), - createLanguage(require("linguist-languages/data/Vue"), { - override: { + }) + ), + createLanguage(require("linguist-languages/data/Vue"), data => + Object.assign(data, { since: "1.10.0", parsers: ["vue"], vscodeLanguageIds: ["vue"] - } - }) + }) + ) ]; const printers = { diff --git a/src/language-js/index.js b/src/language-js/index.js index fbe8ad0a..a02f4c81 100644 --- a/src/language-js/index.js +++ b/src/language-js/index.js @@ -6,18 +6,16 @@ const options = require("./options"); const createLanguage = require("../utils/create-language"); const languages = [ - createLanguage(require("linguist-languages/data/JavaScript"), { - override: { + createLanguage(require("linguist-languages/data/JavaScript"), data => + Object.assign(data, { since: "0.0.0", parsers: ["babel", "flow"], - vscodeLanguageIds: ["javascript"] - }, - extend: { - interpreters: ["nodejs"] - } - }), - createLanguage(require("linguist-languages/data/JavaScript"), { - override: { + vscodeLanguageIds: ["javascript"], + interpreters: data.interpreters.concat(["nodejs"]) + }) + ), + createLanguage(require("linguist-languages/data/JavaScript"), data => + Object.assign(data, { name: "Flow", since: "0.0.0", parsers: ["babel", "flow"], @@ -25,66 +23,62 @@ const languages = [ aliases: [], filenames: [], extensions: [".js.flow"] - } - }), - createLanguage(require("linguist-languages/data/JSX"), { - override: { + }) + ), + createLanguage(require("linguist-languages/data/JSX"), data => + Object.assign(data, { since: "0.0.0", parsers: ["babel", "flow"], vscodeLanguageIds: ["javascriptreact"] - } - }), - createLanguage(require("linguist-languages/data/TypeScript"), { - override: { + }) + ), + createLanguage(require("linguist-languages/data/TypeScript"), data => + Object.assign(data, { since: "1.4.0", parsers: ["typescript"], vscodeLanguageIds: ["typescript"] - } - }), - createLanguage(require("linguist-languages/data/TSX"), { - override: { + }) + ), + createLanguage(require("linguist-languages/data/TSX"), data => + Object.assign(data, { since: "1.4.0", parsers: ["typescript"], vscodeLanguageIds: ["typescriptreact"] - } - }), - createLanguage(require("linguist-languages/data/JSON"), { - override: { + }) + ), + createLanguage(require("linguist-languages/data/JSON"), data => + Object.assign(data, { name: "JSON.stringify", since: "1.13.0", parsers: ["json-stringify"], vscodeLanguageIds: ["json"], extensions: [], // .json file defaults to json instead of json-stringify filenames: ["package.json", "package-lock.json", "composer.json"] - } - }), - createLanguage(require("linguist-languages/data/JSON"), { - override: { + }) + ), + createLanguage(require("linguist-languages/data/JSON"), data => + Object.assign(data, { since: "1.5.0", parsers: ["json"], - vscodeLanguageIds: ["json"] - }, - extend: { - filenames: [".prettierrc"] - } - }), - createLanguage(require("linguist-languages/data/JSON with Comments"), { - override: { + vscodeLanguageIds: ["json"], + filenames: data.filenames.concat([".prettierrc"]) + }) + ), + createLanguage(require("linguist-languages/data/JSON with Comments"), data => + Object.assign(data, { since: "1.5.0", parsers: ["json"], - vscodeLanguageIds: ["jsonc"] - }, - extend: { - filenames: [".eslintrc"] - } - }), - createLanguage(require("linguist-languages/data/JSON5"), { - override: { + vscodeLanguageIds: ["jsonc"], + filenames: data.filenames.concat([".eslintrc"]) + }) + ), + createLanguage(require("linguist-languages/data/JSON5"), data => + Object.assign(data, { since: "1.13.0", parsers: ["json5"], vscodeLanguageIds: ["json5"] - } - }) + }) + ) ]; const printers = { diff --git a/src/language-markdown/index.js b/src/language-markdown/index.js index 2382b4c1..887a8fd6 100644 --- a/src/language-markdown/index.js +++ b/src/language-markdown/index.js @@ -5,29 +5,25 @@ const options = require("./options"); const createLanguage = require("../utils/create-language"); const languages = [ - createLanguage(require("linguist-languages/data/Markdown"), { - override: { + createLanguage(require("linguist-languages/data/Markdown"), data => + Object.assign(data, { since: "1.8.0", parsers: ["remark"], - vscodeLanguageIds: ["markdown"] - }, - extend: { - filenames: ["README"] - }, - exclude: { - extensions: [".mdx"] - } - }), - createLanguage(require("linguist-languages/data/Markdown"), { - override: { + vscodeLanguageIds: ["markdown"], + filenames: data.filenames.concat(["README"]), + extensions: data.extensions.filter(extension => extension !== ".mdx") + }) + ), + createLanguage(require("linguist-languages/data/Markdown"), data => + Object.assign(data, { name: "MDX", since: "1.15.0", parsers: ["mdx"], vscodeLanguageIds: ["mdx"], filenames: [], extensions: [".mdx"] - } - }) + }) + ) ]; const printers = { diff --git a/src/language-yaml/index.js b/src/language-yaml/index.js index b2dace66..7cacfad5 100644 --- a/src/language-yaml/index.js +++ b/src/language-yaml/index.js @@ -5,13 +5,13 @@ const options = require("./options"); const createLanguage = require("../utils/create-language"); const languages = [ - createLanguage(require("linguist-languages/data/YAML"), { - override: { + createLanguage(require("linguist-languages/data/YAML"), data => + Object.assign(data, { since: "1.14.0", parsers: ["yaml"], vscodeLanguageIds: ["yaml"] - } - }) + }) + ) ]; module.exports = { diff --git a/src/utils/create-language.js b/src/utils/create-language.js index 6f330083..e4d2a588 100644 --- a/src/utils/create-language.js +++ b/src/utils/create-language.js @@ -1,6 +1,6 @@ "use strict"; -module.exports = function(linguistData, { extend, override, exclude }) { +module.exports = function(linguistData, transform) { const language = {}; for (const key in linguistData) { @@ -8,23 +8,5 @@ module.exports = function(linguistData, { extend, override, exclude }) { language[newKey] = linguistData[key]; } - if (extend) { - for (const key in extend) { - language[key] = (language[key] || []).concat(extend[key]); - } - } - - if (exclude) { - for (const key in exclude) { - language[key] = (language[key] || []).filter( - value => (exclude[key] || []).indexOf(value) === -1 - ); - } - } - - for (const key in override) { - language[key] = override[key]; - } - - return language; + return transform(language); };