ESLint integration for the Nova code editor.
The extension source code is in the eslint.novaextension/ directory. See the extension README for user documentation.
The project includes a comprehensive test suite covering bug fixes, error handling, and core functionality:
npm test # Run all tests
npm run test:coverage # Run tests with coverage reportThe project uses ESLint with Prettier and Perfectionist for code quality:
npm run lint # Check code style
npm run lint:fix # Auto-fix linting issuesThe project uses Renovate for automated dependency updates:
- Automatic updates: Minor and patch updates are auto-merged after CI passes
- Security alerts: Security vulnerabilities are auto-merged immediately
- Grouped updates: ESLint and Prettier packages are grouped together
- Schedule: Updates run weekly on Mondays before 6am PT
- Install the Renovate GitHub App on your repository
- Renovate will automatically detect the
renovate.jsonconfiguration - Pull requests for dependency updates will be created automatically
You can run Renovate locally to test configuration changes:
npm run renovate:config # Validate renovate.json configuration
npm run renovate # Run Renovate locally (requires GITHUB_TOKEN)To run Renovate CLI with GitHub:
export GITHUB_TOKEN=your_github_token
npm run renovateThe project also includes npm-check-updates for manual dependency updates:
npm run update # Check for updates and update package.json
npm install # Install updated dependenciesTest Coverage:
The test suite includes both integration tests (with Nova mocks) and domain tests (framework-independent):
Integration Tests:
- ESLintProvider: Issue conversion, debouncing, error notifications, disposal
- ESLintRunner: Adapter functionality and backward compatibility
- ESLintUtils: Pure utility functions for parsing and conversion
- Main: Fix-on-save tracking and configuration management
Domain Tests (No Nova Dependencies):
- LintService: Core linting logic, ESLint execution, caching, error handling
- Domain Models: LintConfig, LintRequest, LintResult, FixResult
Test coverage includes:
- Bug fixes (memory leaks, disposal, caching)
- Error handling and notification logic
- Exit code handling and timeout scenarios
- Process execution and stdin/stdout communication
- Fix-on-save cycle prevention
Tests are located in the test/ directory and use Node.js's native test runner (no external libraries required).
- Open this project in Nova
- Enable Extension Development in Nova Preferences → General
- Select Extensions → Activate Project as Extension
- The extension will be active in the current Nova window
eslint.novaextension/
├── extension.json # Extension manifest
├── Scripts/
│ ├── main.js # Entry point
│ ├── eslint-provider.js # Issue provider
│ └── eslint-runner.js # ESLint process runner
├── README.md # User documentation
└── CHANGELOG.md # Version history
- main.js: Activates the extension, registers the issue assistant, watches config changes
- eslint-provider.js: Implements the Nova issue assistant interface, manages issues
- eslint-runner.js: Finds and executes ESLint, handles process communication
- Extension activates when JavaScript/TypeScript files are opened
ESLintProviderimplements Nova's issue assistant interface- On save (or change),
provideIssues()is called ESLintRunnerfinds ESLint innode_modulesand executes it- File content is sent via stdin with
--stdin-filename - ESLint returns JSON results
- Results are converted to Nova
Issueobjects - Issues appear inline in the editor
MIT