mirror of
https://git.tuxpa.in/a/code-server.git
synced 2025-01-21 22:58:46 +00:00
eae5d8c807
These conflicts will be resolved in the following commits. We do it this way so that PR review is possible.
60 lines
2.1 KiB
JavaScript
60 lines
2.1 KiB
JavaScript
"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");
|
|
const minimatch = require("minimatch");
|
|
const utils_1 = require("./utils");
|
|
module.exports = new class {
|
|
constructor() {
|
|
this.meta = {
|
|
messages: {
|
|
badImport: 'Imports violates \'{{restrictions}}\' restrictions. See https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
|
|
},
|
|
docs: {
|
|
url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
|
|
}
|
|
};
|
|
}
|
|
create(context) {
|
|
const configs = context.options;
|
|
for (const config of configs) {
|
|
if (minimatch(context.getFilename(), config.target)) {
|
|
return utils_1.createImportRuleListener((node, value) => this._checkImport(context, config, node, value));
|
|
}
|
|
}
|
|
return {};
|
|
}
|
|
_checkImport(context, config, node, path) {
|
|
// resolve relative paths
|
|
if (path[0] === '.') {
|
|
path = path_1.join(context.getFilename(), path);
|
|
}
|
|
let restrictions;
|
|
if (typeof config.restrictions === 'string') {
|
|
restrictions = [config.restrictions];
|
|
}
|
|
else {
|
|
restrictions = config.restrictions;
|
|
}
|
|
let matched = false;
|
|
for (const pattern of restrictions) {
|
|
if (minimatch(path, pattern)) {
|
|
matched = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!matched) {
|
|
// None of the restrictions matched
|
|
context.report({
|
|
loc: node.loc,
|
|
messageId: 'badImport',
|
|
data: {
|
|
restrictions: restrictions.join(' or ')
|
|
}
|
|
});
|
|
}
|
|
}
|
|
};
|