nextcloud-server/eslint.config.js

106 lines
2.3 KiB
JavaScript

/**
* SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { includeIgnoreFile } from '@eslint/compat'
import { recommended } from '@nextcloud/eslint-config'
import CypressEslint from 'eslint-plugin-cypress'
import noOnlyTests from 'eslint-plugin-no-only-tests'
import { defineConfig } from 'eslint/config'
import * as globals from 'globals'
import { fileURLToPath } from 'node:url'
const gitignorePath = fileURLToPath(new URL('.gitignore', import.meta.url))
export default defineConfig([
{
linterOptions: {
reportUnusedDisableDirectives: 'error',
reportUnusedInlineConfigs: 'error',
},
},
...recommended,
// add globals configuration for Webpack injected variables
{
name: 'server/custom-webpack-globals',
files: ['**/*.js', '**/*.ts', '**/*.vue'],
languageOptions: {
globals: {
PRODUCTION: 'readonly',
},
},
},
// Ensure that cjs files are treated as Node scripts
{
name: 'server/scripts-are-cjs',
files: [
'*.js',
'build/*.js',
],
languageOptions: {
globals: {
...globals.es2023,
...globals.node,
},
},
rules: {
'no-console': 'off',
'jsdoc/require-jsdoc': 'off',
},
},
// Cypress setup
{
...CypressEslint.configs.recommended,
files: ['cypress/**', '**/*.cy.*'],
},
{
name: 'server/cypress',
files: ['cypress/**', '**/*.cy.*'],
rules: {
'no-console': 'off',
'jsdoc/require-jsdoc': 'off',
'jsdoc/require-param-type': 'off',
'jsdoc/require-param-description': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-unused-expressions': 'off',
},
},
// Forbid commiting .only in test files (skipping tests is very unexpected)
{
name: 'server/no-only-in-tests',
files: ['cypress/**', 'apps/**/*.spec.*', 'core/**/*.spec.*'],
plugins: {
'no-only-tests': noOnlyTests,
},
rules: {
'no-only-tests/no-only-tests': 'error',
},
},
// respect .gitignore
includeIgnoreFile(gitignorePath, 'Imported .gitignore patterns'),
// custom server ignore files
{
name: 'server/ignored-files',
ignores: [
'.devcontainer/',
'composer.json',
'**/*.php',
'3rdparty/',
'tests/', // PHP tests
'**/js/',
'**/l10n/', // all translations (config only ignored in root)
'**/vendor/', // different vendors
],
},
])