eslint-plugin: added tests for no-relative-monorepo-imports

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-02-03 18:06:52 +01:00
parent dd8a9afe66
commit aefe3a5624
7 changed files with 102 additions and 137 deletions
+3
View File
@@ -21,6 +21,9 @@ module.exports = {
node: true,
es2021: true,
},
parserOptions: {
sourceType: 'module',
},
rules: {
'@backstage/no-undeclared-imports': ['error'],
'no-unused-expressions': 'off',
+4 -2
View File
@@ -14,13 +14,15 @@
"license": "Apache-2.0",
"main": "./index.js",
"scripts": {
"lint": "backstage-cli package lint"
"lint": "backstage-cli package lint",
"test": "backstage-cli package test"
},
"dependencies": {
"@manypkg/get-packages": "^1.1.3",
"minimatch": "^5.1.2"
},
"devDependencies": {
"@backstage/cli": "workspace:^"
"@backstage/cli": "workspace:^",
"eslint": "^8.33.0"
}
}
@@ -0,0 +1,6 @@
{
"name": "root",
"workspaces": [
"packages/*"
]
}
@@ -0,0 +1,9 @@
{
"name": "@internal/bar",
"backstage": {
"role": "frontend-plugin"
},
"peerDependencies": {
"react": "*"
}
}
@@ -0,0 +1,7 @@
{
"name": "@internal/foo",
"dependencies": {
"@internal/bar": "1.0.0",
"lodash": "*"
}
}
@@ -0,0 +1,68 @@
/*
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { RuleTester } from 'eslint';
import path from 'path';
import rule from '../rules/no-relative-monorepo-imports';
const RULE = 'no-relative-monorepo-imports';
const FIXTURE = path.resolve(__dirname, '__fixtures__/monorepo');
const ERR_OUTSIDE = (path: string) => ({
message: `Import of ${path} is outside of any known monorepo package`,
});
const ERR_FORBIDDEN = (newImp: string) => ({
message: `Relative imports of monorepo packages are forbidden, use '${newImp}' instead`,
});
process.chdir(FIXTURE);
const ruleTester = new RuleTester({
parserOptions: {
sourceType: 'module',
ecmaVersion: 2021,
},
});
ruleTester.run(RULE, rule, {
valid: [
{
code: `import { version } from '@internal/foo'`,
filename: path.join(FIXTURE, 'packages/bar/src/index.ts'),
},
{
code: `import { version } from '@internal/foo/src'`,
filename: path.join(FIXTURE, 'packages/bar/src/index.ts'),
},
],
invalid: [
{
code: `import { version } from '../../foo'`,
filename: path.join(FIXTURE, 'packages/bar/src/index.ts'),
errors: [ERR_FORBIDDEN('@internal/foo')],
},
{
code: `import { version } from '../../foo/src'`,
filename: path.join(FIXTURE, 'packages/bar/src/index.ts'),
errors: [ERR_FORBIDDEN('@internal/foo/src')],
},
{
code: `import { version } from '../../../package.json'`,
filename: path.join(FIXTURE, 'packages/bar/src/index.ts'),
errors: [ERR_OUTSIDE(path.join(FIXTURE, 'package.json'))],
},
],
});
+5 -135
View File
@@ -3721,7 +3721,6 @@ __metadata:
eslint-plugin-import: ^2.25.4
eslint-plugin-jest: ^27.0.0
eslint-plugin-jsx-a11y: ^6.5.1
eslint-plugin-monorepo: ^0.3.2
eslint-plugin-react: ^7.28.0
eslint-plugin-react-hooks: ^4.3.0
eslint-webpack-plugin: ^3.1.1
@@ -4101,6 +4100,7 @@ __metadata:
dependencies:
"@backstage/cli": "workspace:^"
"@manypkg/get-packages": ^1.1.3
eslint: ^8.33.0
minimatch: ^5.1.2
languageName: unknown
linkType: soft
@@ -16670,15 +16670,6 @@ __metadata:
languageName: node
linkType: hard
"array-union@npm:^1.0.1":
version: 1.0.2
resolution: "array-union@npm:1.0.2"
dependencies:
array-uniq: ^1.0.1
checksum: 82cec6421b6e6766556c484835a6d476a873f1b71cace5ab2b4f1b15b1e3162dc4da0d16f7a2b04d4aec18146c6638fe8f661340b31ba8e469fd811a1b45dc8d
languageName: node
linkType: hard
"array-union@npm:^2.1.0":
version: 2.1.0
resolution: "array-union@npm:2.1.0"
@@ -16686,13 +16677,6 @@ __metadata:
languageName: node
linkType: hard
"array-uniq@npm:^1.0.1":
version: 1.0.3
resolution: "array-uniq@npm:1.0.3"
checksum: 1625f06b093d8bf279b81adfec6e72951c0857d65b5e3f65f053fffe9f9dd61c2fc52cff57e38a4700817e7e3f01a4faa433d505ea9e33cdae4514c334e0bf9e
languageName: node
linkType: hard
"array.prototype.flat@npm:^1.2.3, array.prototype.flat@npm:^1.3.1":
version: 1.3.1
resolution: "array.prototype.flat@npm:1.3.1"
@@ -20534,15 +20518,6 @@ __metadata:
languageName: node
linkType: hard
"dir-glob@npm:^2.0.0":
version: 2.2.2
resolution: "dir-glob@npm:2.2.2"
dependencies:
path-type: ^3.0.0
checksum: 3aa48714a9f7845ffc30ab03a5c674fe760477cc55e67b0847333371549227d93953e6627ec160f75140c5bea5c5f88d13c01de79bd1997a588efbcf06980842
languageName: node
linkType: hard
"dir-glob@npm:^3.0.1":
version: 3.0.1
resolution: "dir-glob@npm:3.0.1"
@@ -21606,7 +21581,7 @@ __metadata:
languageName: node
linkType: hard
"eslint-module-utils@npm:^2.1.1, eslint-module-utils@npm:^2.7.4":
"eslint-module-utils@npm:^2.7.4":
version: 2.7.4
resolution: "eslint-module-utils@npm:2.7.4"
dependencies:
@@ -21711,21 +21686,6 @@ __metadata:
languageName: node
linkType: hard
"eslint-plugin-monorepo@npm:^0.3.2":
version: 0.3.2
resolution: "eslint-plugin-monorepo@npm:0.3.2"
dependencies:
eslint-module-utils: ^2.1.1
get-monorepo-packages: ^1.1.0
globby: ^7.1.1
load-json-file: ^4.0.0
minimatch: ^3.0.4
parse-package-name: ^0.1.0
path-is-inside: ^1.0.2
checksum: b6f17efbc9e66aefbf7aacf9aa130bc8e729a6311c412d1b0026ce7d93361c10b0e6e4b10cf434f24ca9a8b2e891bc8e5b82e66dc9ccc5e782f9c18a989eca28
languageName: node
linkType: hard
"eslint-plugin-notice@npm:^0.9.10":
version: 0.9.10
resolution: "eslint-plugin-notice@npm:0.9.10"
@@ -21845,7 +21805,7 @@ __metadata:
languageName: node
linkType: hard
"eslint@npm:^8.6.0":
"eslint@npm:^8.33.0, eslint@npm:^8.6.0":
version: 8.33.0
resolution: "eslint@npm:8.33.0"
dependencies:
@@ -23438,16 +23398,6 @@ __metadata:
languageName: node
linkType: hard
"get-monorepo-packages@npm:^1.1.0":
version: 1.2.0
resolution: "get-monorepo-packages@npm:1.2.0"
dependencies:
globby: ^7.1.1
load-json-file: ^4.0.0
checksum: f9321c11b8e11f02138758db6589d8ab8b7e1b05e78cac92493b635faea10aa100c20fe40f2cf110c82ec100c118c6c131dff4c65d32a721c617dc2928f7b277
languageName: node
linkType: hard
"get-package-type@npm:^0.1.0":
version: 0.1.0
resolution: "get-package-type@npm:0.1.0"
@@ -23598,7 +23548,7 @@ __metadata:
languageName: node
linkType: hard
"glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.1.7, glob@npm:^7.2.0":
"glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.1.7, glob@npm:^7.2.0":
version: 7.2.3
resolution: "glob@npm:7.2.3"
dependencies:
@@ -23707,20 +23657,6 @@ __metadata:
languageName: node
linkType: hard
"globby@npm:^7.1.1":
version: 7.1.1
resolution: "globby@npm:7.1.1"
dependencies:
array-union: ^1.0.1
dir-glob: ^2.0.0
glob: ^7.1.2
ignore: ^3.3.5
pify: ^3.0.0
slash: ^1.0.0
checksum: f0eba08a08ae7c98149a4411661c0bf08c4717d81e6f355cf624fb01880b249737eb8e951bf86124cb3af8ea1c793c0a9d363ed5cdec99bb2c6b68f8a323025f
languageName: node
linkType: hard
"good-listener@npm:^1.2.2":
version: 1.2.2
resolution: "good-listener@npm:1.2.2"
@@ -24710,13 +24646,6 @@ __metadata:
languageName: node
linkType: hard
"ignore@npm:^3.3.5":
version: 3.3.10
resolution: "ignore@npm:3.3.10"
checksum: 23e8cc776e367b56615ab21b78decf973a35dfca5522b39d9b47643d8168473b0d1f18dd1321a1bab466a12ea11a2411903f3b21644f4d5461ee0711ec8678bd
languageName: node
linkType: hard
"ignore@npm:^5.1.4, ignore@npm:^5.2.0":
version: 5.2.0
resolution: "ignore@npm:5.2.0"
@@ -26828,13 +26757,6 @@ __metadata:
languageName: node
linkType: hard
"json-parse-better-errors@npm:^1.0.1":
version: 1.0.2
resolution: "json-parse-better-errors@npm:1.0.2"
checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d
languageName: node
linkType: hard
"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1":
version: 2.3.1
resolution: "json-parse-even-better-errors@npm:2.3.1"
@@ -27725,18 +27647,6 @@ __metadata:
languageName: node
linkType: hard
"load-json-file@npm:^4.0.0":
version: 4.0.0
resolution: "load-json-file@npm:4.0.0"
dependencies:
graceful-fs: ^4.1.2
parse-json: ^4.0.0
pify: ^3.0.0
strip-bom: ^3.0.0
checksum: 8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356
languageName: node
linkType: hard
"load-yaml-file@npm:^0.2.0":
version: 0.2.0
resolution: "load-yaml-file@npm:0.2.0"
@@ -30849,16 +30759,6 @@ __metadata:
languageName: node
linkType: hard
"parse-json@npm:^4.0.0":
version: 4.0.0
resolution: "parse-json@npm:4.0.0"
dependencies:
error-ex: ^1.3.1
json-parse-better-errors: ^1.0.1
checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5
languageName: node
linkType: hard
"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0":
version: 5.2.0
resolution: "parse-json@npm:5.2.0"
@@ -30871,13 +30771,6 @@ __metadata:
languageName: node
linkType: hard
"parse-package-name@npm:^0.1.0":
version: 0.1.0
resolution: "parse-package-name@npm:0.1.0"
checksum: 7d69b1deeaf82d5a59536c5a8772c8db003b1415dd2465073343dfab5caf90917ecfffdd71d1c004f5cf963c3881ccb8899d0ff820eac705a272e817e246de14
languageName: node
linkType: hard
"parse-path@npm:^7.0.0":
version: 7.0.0
resolution: "parse-path@npm:7.0.0"
@@ -31150,7 +31043,7 @@ __metadata:
languageName: node
linkType: hard
"path-is-inside@npm:1.0.2, path-is-inside@npm:^1.0.2":
"path-is-inside@npm:1.0.2":
version: 1.0.2
resolution: "path-is-inside@npm:1.0.2"
checksum: 0b5b6c92d3018b82afb1f74fe6de6338c4c654de4a96123cb343f2b747d5606590ac0c890f956ed38220a4ab59baddfd7b713d78a62d240b20b14ab801fa02cb
@@ -31249,15 +31142,6 @@ __metadata:
languageName: node
linkType: hard
"path-type@npm:^3.0.0":
version: 3.0.0
resolution: "path-type@npm:3.0.0"
dependencies:
pify: ^3.0.0
checksum: 735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6
languageName: node
linkType: hard
"path-type@npm:^4.0.0":
version: 4.0.0
resolution: "path-type@npm:4.0.0"
@@ -31432,13 +31316,6 @@ __metadata:
languageName: node
linkType: hard
"pify@npm:^3.0.0":
version: 3.0.0
resolution: "pify@npm:3.0.0"
checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde
languageName: node
linkType: hard
"pify@npm:^4.0.1":
version: 4.0.1
resolution: "pify@npm:4.0.1"
@@ -34985,13 +34862,6 @@ __metadata:
languageName: node
linkType: hard
"slash@npm:^1.0.0":
version: 1.0.0
resolution: "slash@npm:1.0.0"
checksum: 4b6e21b1fba6184a7e2efb1dd173f692d8a845584c1bbf9dc818ff86f5a52fc91b413008223d17cc684604ee8bb9263a420b1182027ad9762e35388434918860
languageName: node
linkType: hard
"slash@npm:^2.0.0":
version: 2.0.0
resolution: "slash@npm:2.0.0"