ende lint
Ende ships with a built-in linter that analyzes your code for potential errors, bugs, and stylistic issues. For a broader overview, see Linting and Formatting.
Basic usage
Lint all TypeScript and JavaScript files in the current directory:
ende lint
Lint specific files or directories:
ende lint src/ main.ts
Watch mode
Automatically re-lint files when they change:
ende lint --watch
Using in CI
ende lint exits with a non-zero status code when it finds violations, making
it suitable for CI pipelines:
ende lint
ende fmt --check
ende test
Available rules
Ende's linter includes over 100 rules. View all available rules:
ende lint --rules
For a full list with documentation, visit the lint rules reference.
Configuring rules in ende.json
Customize which rules are active in your ende.json:
{
"lint": {
"rules": {
"tags": ["recommended"],
"include": ["ban-untagged-todo"],
"exclude": ["no-unused-vars"]
}
}
}tags— rule sets to enable. Available tags:recommended,freshinclude— additional individual rules to enableexclude— rules to disable even if included by a tag
Many rules do not belong to any tag (for example eqeqeq or no-console).
Those rules are not enabled by tags and must be turned on by listing them
individually in include. You can check whether a rule has a tag with
ende lint --rules or on each rule's page in the lint rules
reference.
See the Configuration page for all available options.
Including and excluding files
Specify which files to lint in ende.json:
{
"lint": {
"include": ["src/"],
"exclude": ["src/testdata/", "src/generated/**/*.ts"]
}
}You can also exclude files from the command line:
ende lint --ignore=dist/,build/
Lint plugins
You can extend the linter with custom rules using lint plugins.
Ignore directives
File level
To ignore a whole file use // deno-lint-ignore-file at the top of the file:
// deno-lint-ignore-file
function foo(): any {
// ...
}
You can also specify the reason for ignoring the file:
// deno-lint-ignore-file -- reason for ignoring
function foo(): any {
// ...
}
The ignore directive must be placed before the first statement or declaration:
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
/**
* Some JS doc
*/
// deno-lint-ignore-file
import { bar } from "./bar.js";
function foo(): any {
// ...
}
You can also ignore certain diagnostics in the whole file:
// deno-lint-ignore-file no-explicit-any no-empty
function foo(): any {
// ...
}
If there are multiple // deno-lint-ignore-file directives, all but the first
one are ignored:
// This is effective
// deno-lint-ignore-file no-explicit-any no-empty
// But this is NOT effective
// deno-lint-ignore-file no-debugger
function foo(): any {
debugger; // not ignored!
}
Line level
To ignore specific diagnostics use // deno-lint-ignore <codes...> on the
preceding line of the offending line.
// deno-lint-ignore no-explicit-any
function foo(): any {
// ...
}
// deno-lint-ignore no-explicit-any explicit-function-return-type
function bar(a: any) {
// ...
}
You must specify the names of the rules to be ignored.
You can also specify the reason for ignoring the diagnostic:
// deno-lint-ignore no-explicit-any -- reason for ignoring
function foo(): any {
// ...
}
Ignore ban-unused-ignore itself
ende lint provides ban-unused-ignore rule,
which will detect ignore directives that don't ever suppress certain
diagnostics. This is useful when you want to discover ignore directives that are
no longer necessary after refactoring the code.
In a few cases, however, you might want to ignore ban-unused-ignore rule
itself. One of the typical cases would be when working with auto-generated
files; it makes sense to add file-level ignore directives for some rules, and
there's almost no need for detecting unused directives via ban-unused-ignore
in this case.
You can use // deno-lint-ignore-file ban-unused-ignore as always if you want
to suppress the rule for a whole file:
// deno-lint-ignore-file ban-unused-ignore no-explicit-any
// `no-explicit-any` isn't used but you'll get no diagnostics because of ignoring
// `ban-unused-ignore`
console.log(42);
Do note that ignoring ban-unused-ignore itself only works via file-level
ignore directives. This means that per line directives, like
// deno-lint-ignore ban-unused-ignore, don't work at all. If you want to
ignore ban-unused-ignore for some special reasons, make sure to add it as a
file-level ignore directive.
Command line usage:
lintLint source files
Options
--allow-import, -I
Allow importing from remote hosts. Optionally specify allowed IP addresses and host names, with ports as necessary. Default value: deno.land:443,jsr.io:443,esm.sh:443,raw.esm.sh:443,cdn.jsdelivr.net:443,raw.githubusercontent.com:443,gist.githubusercontent.com:443.
--compact
Output lint result in compact format.
--config, -c
Configure different aspects of ende including TypeScript, linting, and code formatting.
Typically the configuration file will be called ende.json or ende.jsonc and
automatically detected; in that case this flag is not necessary.
--deny-import
Deny importing from remote hosts. Optionally specify denied IP addresses and host names, with ports as necessary.
--ext
Specify the file extension to lint when reading from stdin.For example, use jsx to lint JSX files or tsx for TSX files.This argument is necessary because stdin input does not automatically infer the file type.Example usage: cat file.jsx | ende lint - --ext=jsx.
--fix
Fix any linting errors for rules that support it.
--ignore
Ignore linting particular source files.
--json
Output lint result in JSON format.
--no-clear-screen
Do not clear terminal screen when under watch mode.
--no-config
Disable automatic loading of the configuration file.
--permit-no-files
Don't return an error code if no files were found.
--rules
List available rules.
--rules-exclude
Exclude lint rules.
--rules-include
Include lint rules.
--watch
Watch for file changes and restart process automatically. Local files from entry point module graph are watched by default. Additional paths might be watched by passing them as arguments to this flag.
--watch-exclude
Exclude provided files/patterns from watch mode.