From 2ea9132cab688d99dd2c9fa57fb12f3b91b1d689 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 30 Dec 2019 11:19:24 +0100 Subject: [PATCH] migrate no-nls-in-standalone-editor rule --- .eslintrc.json | 1 + .../code-no-nls-in-standalone-editor.js | 54 +++++++++++++++ .../code-no-nls-in-standalone-editor.ts | 67 +++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 build/lib/eslint/code-no-nls-in-standalone-editor.js create mode 100644 build/lib/eslint/code-no-nls-in-standalone-editor.ts diff --git a/.eslintrc.json b/.eslintrc.json index 94736aca17d..69a7bd2fd03 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -29,6 +29,7 @@ "@typescript-eslint/semi": "warn", "@typescript-eslint/class-name-casing": "warn", "code-translation-remind": "warn", + "code-no-nls-in-standalone-editor": "warn", "code-layering": [ "warn", { diff --git a/build/lib/eslint/code-no-nls-in-standalone-editor.js b/build/lib/eslint/code-no-nls-in-standalone-editor.js new file mode 100644 index 00000000000..8a13a1c8f17 --- /dev/null +++ b/build/lib/eslint/code-no-nls-in-standalone-editor.js @@ -0,0 +1,54 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +const path_1 = require("path"); +module.exports = new class NoNlsInStandaloneEditorRule { + constructor() { + this.meta = { + type: 'problem', + schema: {}, + messages: { + noNls: 'Not allowed to import vs/nls in standalone editor modules. Use standaloneStrings.ts' + } + }; + } + create(context) { + const fileName = context.getFilename(); + if (!(/vs(\/|\\)editor(\/|\\)standalone(\/|\\)/.test(fileName) + || /vs(\/|\\)editor(\/|\\)common(\/|\\)standalone(\/|\\)/.test(fileName) + || /vs(\/|\\)editor(\/|\\)editor.api/.test(fileName) + || /vs(\/|\\)editor(\/|\\)editor.main/.test(fileName) + || /vs(\/|\\)editor(\/|\\)editor.worker/.test(fileName))) { + return {}; + } + return { + ImportDeclaration: (node) => { + this._checkImport(context, node, node.source.value); + }, + CallExpression: (node) => { + var _a; + const { callee, arguments: args } = node; + if (callee.type === 'Import' && ((_a = args[0]) === null || _a === void 0 ? void 0 : _a.type) === 'Literal') { + this._checkImport(context, node, args[0].value); + } + } + }; + } + _checkImport(context, node, path) { + if (typeof path !== 'string') { + return; + } + // resolve relative paths + if (path[0] === '.') { + path = path_1.join(context.getFilename(), path); + } + if (/vs(\/|\\)nls/.test(path)) { + context.report({ + node, + messageId: 'noNls' + }); + } + } +}; diff --git a/build/lib/eslint/code-no-nls-in-standalone-editor.ts b/build/lib/eslint/code-no-nls-in-standalone-editor.ts new file mode 100644 index 00000000000..060ce579497 --- /dev/null +++ b/build/lib/eslint/code-no-nls-in-standalone-editor.ts @@ -0,0 +1,67 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as eslint from 'eslint'; +import * as estree from 'estree'; +import { join } from 'path'; + +export = new class NoNlsInStandaloneEditorRule implements eslint.Rule.RuleModule { + + readonly meta = { + type: 'problem', + schema: {}, + messages: { + noNls: 'Not allowed to import vs/nls in standalone editor modules. Use standaloneStrings.ts' + } + }; + + create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener { + + const fileName = context.getFilename(); + if (!( + /vs(\/|\\)editor(\/|\\)standalone(\/|\\)/.test(fileName) + || /vs(\/|\\)editor(\/|\\)common(\/|\\)standalone(\/|\\)/.test(fileName) + || /vs(\/|\\)editor(\/|\\)editor.api/.test(fileName) + || /vs(\/|\\)editor(\/|\\)editor.main/.test(fileName) + || /vs(\/|\\)editor(\/|\\)editor.worker/.test(fileName) + )) { + return {}; + } + + return { + ImportDeclaration: (node: estree.Node) => { + this._checkImport(context, node, (node).source.value); + }, + CallExpression: (node: estree.Node) => { + const { callee, arguments: args } = node; + if ((callee.type) === 'Import' && args[0]?.type === 'Literal') { + this._checkImport(context, node, (args[0]).value); + } + } + }; + } + + private _checkImport(context: eslint.Rule.RuleContext, node: estree.Node, path: any) { + if (typeof path !== 'string') { + return; + } + + // resolve relative paths + if (path[0] === '.') { + path = join(context.getFilename(), path); + } + + if ( + /vs(\/|\\)nls/.test(path) + ) { + context.report({ + node, + messageId: 'noNls' + }); + } + + } +}; +