This project uses ESLint with the modern flat config format (eslint.config.js) to ensure code quality and consistency.
The ESLint setup includes multiple plugins and configurations optimized for a Jira plugin with React, TypeScript, and Atlassian Design System components.
-
XO TypeScript (
eslint-config-xo-typescript)- Provides strict TypeScript linting rules
- Enforces best practices for TypeScript code
-
XO React (
eslint-config-xo-react)- React-specific linting rules
- Enforces React best practices and patterns
-
TanStack Query (
@tanstack/eslint-plugin-query)- Ensures best practices for React Query usage
- Catches common mistakes in query hooks
-
Compiled (
@compiled/eslint-plugin)- Ensures proper usage of
@compiled/react - Validates CSS-in-JS syntax and patterns
- Ensures proper usage of
-
Security (
eslint-plugin-security)- Catches common security issues
- Helps prevent security vulnerabilities
-
Atlaskit Design System (
@atlaskit/eslint-plugin-design-system)- Enforces Atlassian Design System patterns
- Ensures proper component usage
-
Atlaskit UI Styling Standard (
@atlaskit/eslint-plugin-ui-styling-standard)- Enforces styling standards for Atlaskit components
- Validates design token usage
-
Prettier (
eslint-plugin-prettier)- Integrates Prettier for code formatting
- Must be last to override formatting rules
The following are excluded from linting:
src/jira.d.ts- Type definitionsdist/- Build outputnode_modules/- Dependencies**/*.config.js/cjs/mjs- Configuration filescoverage/- Test coverage reportsbuild/- Build artifactstsconfig.json- TypeScript config
- react/react-in-jsx-scope: Disabled (React 18+ doesn't require React import)
The XO TypeScript configuration provides several useful defaults:
- @typescript-eslint/no-unused-vars: Allows variables starting with underscore
- Useful for intentionally unused parameters (e.g.,
_event,_unused) - Pattern:
^_for args, vars, and caught errors
- Useful for intentionally unused parameters (e.g.,
- ECMAVersion:
2024- Enables ECMAScript 2024 features for consistent behavior - Source Type:
module- ES modules - JSX Support: Automatically enabled for
.tsxfiles by TypeScript parser - TypeScript Project: Linked to
./tsconfig.json
pnpm lintThis command will:
- Check all
.js,.ts, and.tsxfiles - Automatically fix issues where possible
- Report any remaining issues
pnpm eslint 'src/**/*.{ts,tsx}'pnpm eslint src/settings-app/App.tsx- Run linting before commits - Ensure code quality before committing
- Fix warnings and errors - Don't ignore linting issues
- Use underscore prefix - For intentionally unused variables (e.g.,
_props) - Follow TypeScript strict mode - Enabled via tsconfig.json
- Security checks - Pay attention to security plugin warnings
eslint.config.js- Main ESLint configuration (flat config format)tsconfig.json- TypeScript configuration used by ESLint.gitignore- Excludes linting artifacts
Ensure your glob patterns in package.json scripts are correct:
"lint": "eslint '*/**/*.{js,ts,tsx}' --fix"Check that:
tsconfig.jsonis valid- TypeScript files are included in the config
- Parser options reference the correct tsconfig path
The configuration order matters. Prettier must be last to override formatting rules from other plugins.
This project has migrated from the legacy .eslintrc format to the modern flat config format (eslint.config.js). The old eslintConfig section in package.json has been removed to avoid conflicts.