Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/denoland/deno_lint
Blazing fast linter for JavaScript and TypeScript written in Rust
https://github.com/denoland/deno_lint
deno javascript linters typescript
Last synced: 3 days ago
JSON representation
Blazing fast linter for JavaScript and TypeScript written in Rust
- Host: GitHub
- URL: https://github.com/denoland/deno_lint
- Owner: denoland
- License: mit
- Created: 2020-03-28T12:31:24.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-10-28T20:55:19.000Z (about 2 months ago)
- Last Synced: 2024-10-29T14:54:13.708Z (about 1 month ago)
- Topics: deno, javascript, linters, typescript
- Language: Rust
- Homepage: https://lint.deno.land/
- Size: 2.93 MB
- Stars: 1,540
- Watchers: 26
- Forks: 171
- Open Issues: 128
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-blazingly-fast - deno_lint - Blazing fast linter for JavaScript and TypeScript written in Rust (Rust)
- awesome-list - deno_lint
- awesome-js-tooling-not-in-js - Deno Lint
- awesome-js-tooling-in-rust - deno Lint
- awesome-alternatives-in-rust - deno_lint - Blazing fast linter for JavaScript and TypeScript written in Rust (Development tools / Linters)
- awesome-f2e-libs - **deno_lint** - 基于 Rust,支持 JavaScript 和 TypeScript 的 lint 工具。 (打包工具 / 非 JavaScript 编译工具)
- awesome-fe - **deno_lint** - 基于 Rust,支持 JavaScript 和 TypeScript 的 lint 工具。 (打包工具 / 非 JavaScript 编译工具)
README
# `deno_lint`
[![](https://img.shields.io/crates/v/deno_lint.svg)](https://crates.io/crates/deno_lint)
[![Discord Chat](https://img.shields.io/discord/684898665143206084?logo=discord&style=social)](https://discord.gg/deno)A Rust crate for writing fast JavaScript and TypeScript linters.
This crate powers [`deno lint`](https://deno.land/manual/tools/linter), but is
not Deno specific and can be used to write linters for Node as well._Supports `recommended` set of rules from ESLint and `@typescript-eslint` out of
the box with no config._See [the roadmap](https://github.com/denoland/deno_lint/issues/176)
---
## Supported rules
Visit https://lint.deno.land for the list of available rules.
## Performance
Blazing fast, see comparison with ESLint:
```json
[
{
"name": "deno_lint",
"totalMs": 105.3750100000002,
"runsCount": 5,
"measuredRunsAvgMs": 21.07500200000004,
"measuredRunsMs": [
24.79783199999997,
19.563640000000078,
20.759051999999883,
19.99068000000011,
20.26380600000016
]
},
{
"name": "eslint",
"totalMs": 11845.073306000002,
"runsCount": 5,
"measuredRunsAvgMs": 2369.0146612000003,
"measuredRunsMs": [
2686.1039550000005,
2281.501061,
2298.6185210000003,
2279.5962849999996,
2299.2534840000008
]
}
]
```_Benchmarks are run during CI on Ubuntu, using the same set of rules for both
linters. Test subject is [`oak` server](https://github.com/oakserver/oak)
consisting of about 50 files. See [`./benchmarks/`](./benchmarks/) directory for
more info._## Node.js bindings
If you want to use `deno_lint` with Node, please refer to
[`@node-rs/deno-lint`](https://www.npmjs.com/package/@node-rs/deno-lint) package
which provides programmatic API as well as Webpack loader for `deno_lint`.## Example
`examples/dlint/main.rs` provides a minimal standalone binary demonstrating how
`deno_lint` can be used as a crate.```shell
# Build standalone binary
$ cargo build --example dlint --features="docs"$ ./target/debug/examples/dlint --help
dlint
USAGE:
dlintFLAGS:
-h, --help Prints help information
-V, --version Prints version informationSUBCOMMANDS:
help Prints this message or the help of the given subcommand(s)
rules
run$ ./target/debug/examples/dlint run ../deno/std/http/server.ts ../deno/std/http/file_server.ts
(no-empty) Empty block statement
--> ../deno/std/http/server.ts:93:14
|
93 | } catch {}
| ^^
|
(no-empty) Empty block statement
--> ../deno/std/http/server.ts:111:44
|
111 | while ((await body.read(buf)) !== null) {}
| ^^
|
(no-empty) Empty block statement
--> ../deno/std/http/server.ts:120:41
|
120 | constructor(public listener: Listener) {}
| ^^
|
(ban-untagged-todo) TODO should be tagged with (@username) or (#issue)
--> ../deno/std/http/file_server.ts:5:0
|
5 | // TODO Stream responses instead of reading them into memory.
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
(ban-untagged-todo) TODO should be tagged with (@username) or (#issue)
--> ../deno/std/http/file_server.ts:6:0
|
6 | // TODO Add tests like these:
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
(ban-untagged-todo) TODO should be tagged with (@username) or (#issue)
--> ../deno/std/http/file_server.ts:137:0
|
137 | // TODO: simplify this after deno.stat and deno.readDir are fixed
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
(no-empty) Empty block statement
--> ../deno/std/http/file_server.ts:155:16
|
155 | } catch (e) {}
| ^^
|
Found 7 problems
```For more concrete implementation visit
[`deno`](https://github.com/denoland/deno/blob/main/cli/tools/lint/mod.rs)## Developing
Make sure to have latest stable version of Rust installed (1.56.0).
```shell
// check version
$ rustc --version
rustc 1.56.0 (09c42c458 2021-10-18)// build all targets
$ cargo build --all-targets// test it
$ cargo test
```### Generating flamegraph (Linux)
Prerequisites:
- Install [`perf`](https://perf.wiki.kernel.org/index.php/Main_Page),
[`stackcollapse-perf`](https://github.com/brendangregg/FlameGraph/blob/master/flamegraph.pl),
[`c++filt`](https://sourceware.org/binutils/docs/binutils/c_002b_002bfilt.html)
and
[`flamegraph`](https://github.com/brendangregg/FlameGraph/blob/master/flamegraph.pl)```shell
$ RUSTFLAGS='-g' cargo build --release --all-targets # build target
$ sudo perf record --call-graph dwarf ./target/release/examples/dlint benchmarks/oak/**.ts # create performance profile
$ perf script | stackcollapse-perf | c++filt | flamegraph > flame.svg # generate flamegraph
```You can use
[rust-unmangle](https://github.com/Yamakaky/rust-unmangle/blob/master/rust-unmangle)
or [rustfilt](https://github.com/luser/rustfilt) instead of c++filt.These commands can take a few minutes to run.
## Contributing
- If you are going to work on an issue, mention so in the issue comments
_before_ you start working on the issue.- Please be professional in the forums. We follow
[Rust's code of conduct](https://www.rust-lang.org/policies/code-of-conduct)
(CoC) Have a problem? Email [email protected].- Ask for help in the [community chat room](https://discord.gg/TGMHGv6).
## Submitting a Pull Request
Before submitting, please make sure the following is done:
1. That there is a related issue and it is referenced in the PR text.
2. There are tests that cover the changes.
3. Ensure `cargo test` passes.
4. Format your code with `deno run --allow-run tools/format.ts`
5. Make sure `deno run --allow-run --allow-env tools/lint.ts` passes.
6. If you've added a new rule:
1. Run `cargo build --example dlint --all-features`
2. Update docs by running the generated binary with these arguments
`./target/debug/examples/dlint rules --json > www/static/docs.json`
3. Update schema via `deno task update-schemas`