mirror of
https://github.com/grafana/grafana.git
synced 2024-12-01 21:19:28 -06:00
172 lines
6.0 KiB
Plaintext
172 lines
6.0 KiB
Plaintext
{
|
|
"extends": ["@grafana/eslint-config", "plugin:react/jsx-runtime"],
|
|
"root": true,
|
|
"plugins": [
|
|
"@emotion",
|
|
"lodash",
|
|
"jest",
|
|
"import",
|
|
"jsx-a11y",
|
|
"@grafana",
|
|
"no-barrel-files",
|
|
// Included so betterer doesn't fail when processing all files,
|
|
// as other parts of the code use testing-library plugin
|
|
"testing-library",
|
|
],
|
|
"settings": {
|
|
"import/internal-regex": "^(app/)|(@grafana)",
|
|
"import/external-module-folders": ["node_modules", ".yarn"],
|
|
},
|
|
"rules": {
|
|
"@emotion/syntax-preference": [2, "object"],
|
|
"@grafana/no-border-radius-literal": "error",
|
|
"@grafana/no-unreduced-motion": "error",
|
|
"react/prop-types": "off",
|
|
// need to ignore emotion's `css` prop, see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md#rule-options
|
|
"react/no-unknown-property": ["error", { "ignore": ["css"] }],
|
|
"@emotion/jsx-import": "error",
|
|
"lodash/import-scope": [2, "member"],
|
|
"jest/no-focused-tests": "error",
|
|
"import/order": [
|
|
"error",
|
|
{
|
|
"groups": [["builtin", "external"], "internal", "parent", "sibling", "index"],
|
|
"newlines-between": "always",
|
|
"alphabetize": { "order": "asc" },
|
|
},
|
|
],
|
|
"no-restricted-imports": [
|
|
"error",
|
|
{
|
|
"paths": [
|
|
{
|
|
"name": "react-redux",
|
|
"importNames": ["useDispatch", "useSelector"],
|
|
"message": "Please import from app/types instead.",
|
|
},
|
|
{
|
|
"name": "react-i18next",
|
|
"importNames": ["Trans", "t"],
|
|
"message": "Please import from app/core/internationalization instead",
|
|
},
|
|
{
|
|
"name": "react-router-dom",
|
|
"message": "Please import from react-router-dom-v5-compat instead"
|
|
},
|
|
{
|
|
"name": "react-router",
|
|
"message": "Please import from react-router-dom-v5-compat instead"
|
|
}
|
|
],
|
|
},
|
|
],
|
|
|
|
// Use typescript's no-redeclare for compatibility with overrides
|
|
"no-redeclare": "off",
|
|
"@typescript-eslint/no-redeclare": ["error"],
|
|
},
|
|
"overrides": [
|
|
{
|
|
"files": ["packages/grafana-ui/src/components/uPlot/**/*.{ts,tsx}"],
|
|
"rules": {
|
|
"react-hooks/rules-of-hooks": "off",
|
|
"react-hooks/exhaustive-deps": "off",
|
|
},
|
|
},
|
|
{
|
|
"files": ["packages/grafana-ui/src/components/ThemeDemos/**/*.{ts,tsx}"],
|
|
"rules": {
|
|
"@emotion/jsx-import": "off",
|
|
"react/jsx-uses-react": "off",
|
|
"react/react-in-jsx-scope": "off",
|
|
},
|
|
},
|
|
{
|
|
"files": ["public/dashboards/scripted*.js"],
|
|
"rules": {
|
|
"no-redeclare": "error",
|
|
"@typescript-eslint/no-redeclare": "off",
|
|
},
|
|
},
|
|
{
|
|
"extends": ["plugin:jsx-a11y/recommended"],
|
|
"files": ["**/*.tsx"],
|
|
"excludedFiles": ["**/*.{spec,test}.tsx"],
|
|
"rules": {
|
|
// rules marked "off" are those left in the recommended preset we need to fix
|
|
// we should remove the corresponding line and fix them one by one
|
|
// any marked "error" contain specific overrides we'll need to keep
|
|
"jsx-a11y/no-autofocus": [
|
|
"error",
|
|
{
|
|
"ignoreNonDOM": true,
|
|
},
|
|
],
|
|
"jsx-a11y/label-has-associated-control": [
|
|
"error",
|
|
{
|
|
"controlComponents": ["NumberInput"],
|
|
"depth": 2,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
"files": [
|
|
"public/app/plugins/datasource/azuremonitor/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/azuremonitor/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/cloud-monitoring/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/cloud-monitoring/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/elasticsearch/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/elasticsearch/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/grafana-postgresql-datasource/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/grafana-postgresql-datasource/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/grafana-pyroscope-datasource/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/grafana-pyroscope-datasource/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/grafana-testdata-datasource/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/grafana-testdata-datasource/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/jaeger/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/jaeger/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/loki/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/loki/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/mysql/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/mysql/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/parca/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/parca/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/tempo/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/tempo/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/loki/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/loki/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/elasticsearch/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/elasticsearch/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/cloudwatch/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/cloudwatch/**/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/zipkin/*.{ts,tsx}",
|
|
"public/app/plugins/datasource/zipkin/**/*.{ts,tsx}",
|
|
],
|
|
"settings": {
|
|
"import/resolver": {
|
|
"node": {
|
|
"extensions": [".ts", ".tsx"],
|
|
},
|
|
},
|
|
},
|
|
"rules": {
|
|
"import/no-restricted-paths": [
|
|
"error",
|
|
{
|
|
"zones": [
|
|
{
|
|
"target": "./public/app/plugins",
|
|
"from": "./public",
|
|
"except": ["./app/plugins"],
|
|
"message": "Core plugins are not allowed to depend on Grafana core packages",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
],
|
|
}
|