GitHub - typescript-eslint/tsgolint: ✨ Experimental proof-of-concept typescript-go powered JS/TS linter written in Go (original) (raw)

✨ tsgolint ✨

tsgolint is an experimental proof-of-concept typescript-go powered JS/TS linter written in Go.

Important

tsgolint is a prototype in the early stages of development. It is not actively being worked on, nor is it expected to be production ready. See Goals and Non-Goals.

Running tsgolint on microsoft/typescript repo

What's been prototyped

Speedup over ESLint

tsgolint is 20-40 times faster than ESLint + typescript-eslint.

Most of the speedup is due to the following facts:

See benchmarks for more info.

Implemented rules

Name Status
await-thenable
no-array-delete
no-base-to-string
no-confusing-void-expression
no-duplicate-type-constituents
no-floating-promises
no-for-in-array
no-implied-eval
no-meaningless-void-operator
no-misused-promises
no-misused-spread
no-mixed-enums
no-redundant-type-constituents
no-unnecessary-boolean-literal-compare
no-unnecessary-template-expression
no-unnecessary-type-arguments
no-unnecessary-type-assertion
no-unsafe-argument
no-unsafe-assignment
no-unsafe-call
no-unsafe-enum-comparison
no-unsafe-member-access
no-unsafe-return
no-unsafe-type-assertion
no-unsafe-unary-minus
non-nullable-type-assertion-style
only-throw-error
prefer-promise-reject-errors
prefer-reduce-type-parameter
prefer-return-this-type
promise-function-async
related-getter-setter-pairs
require-array-sort-compare
require-await
restrict-plus-operands
restrict-template-expressions
return-await
switch-exhaustiveness-check
unbound-method
use-unknown-in-catch-callback-variable

What hasn't been prototyped

What about JS plugins?

JS-based plugins are not currently supported.

Goals and Non-Goals

tsgolint is an experiment. It is not under active development.

Goals: to explore architectures and performance characteristics. We want to investigate how much faster linting could be if we moved the linter to Go alongside typescript-go.

Non-Goals: we have no plans to take significant development budget away from typescript-eslint to work on tsgolint. Our plan is to continue to work on typescript-eslint to supported typed linting with ESLint. Experiments such as tsgolint should not be taken as indications of any project direction.

If you want faster typed linting with ESLint, see typescript-eslint/typescript-eslint#10940 Enhancement: Use TypeScript's Go port (tsgo / typescript-go) for type information.

Building tsgolint

git submodule update --init # init typescript-go submodule

cd typescript-go git am --3way --no-gpg-sign ../patches/*.patch # apply typescript-go patches cd ..

go build -o tsgolint ./cmd/tsgolint