Description
🚧 (This is a living document and a work in progress. Watch this space for emerging details. And do provide feedback!) 🚧
Background
Costs. There are costs to having the linter source living externally and separate from the analyzer. In practice, the two are quite tightly coupled and not being able to make changes atomically across them (when an analyzer API changes or a new lint is added for example) creates extra work (e.g., otherwise needless analyzer package publications) and bookkeeping (e.g., TODOs or issues to track the implementation of quick fixes for new lints that cannot be landed until the new lint is available in the SDK). Lints are also very difficult to evolve as any downstream impact from changed semantics is only detected when a linter roll into the Dart SDK's DEPS
is evaluated. Having the linter workflow external and unfamiliar to Dart team members has also (arguably) limited Dart team contributions.
Benefits. There are benefits too. Particularly in the early days of this project we've greatly benefited from the relative nimbleness of a workflow that favors external contributions, allows easy CI customization and enjoys the relative focus of a dedicated issue tracker.
Today. When the linter was growing rapidly and was a tool that was effectively adjacent to the core Dart SDK offerings, the benefits (IMO clearly) outweighed the costs. The landscape today is different though. The linter is effectively now itself a core offering, with lints a central part of the developer experience and various subsets endorsed by the Dart and Flutter teams and promoted as part of standard best practice (see package:lints).
Making a move. In light of this, we'd like to move the linter sources (and issue tracking) into the Dart SDK.
Plan
(WIP planning notes. Details to be filled in.)
Readiness. There are a bunch of steps to make the linter ready for a move.
Sources
Build. To make the source buildable in sdk/pkg
, we'll need to:
To not lose the build check automation we enjoy from GitHub actions, we'll want to:
Testing. To make the source testable in the SDK build, we'll need to:
(Nice to have) To speed up test runes we might:
Documentation. We currently auto-generate lint docs here and host them on GitHub pages. We need:
We'll also need to:
- update contributing guidelines and docs to integrate with an SDK development workflow
Process. We should tidy up stale process bits.
Notably, as we're no longer publishing the package, we should:
Post move. After moving a number of bits will need tidying up:
Issues
To get the issue tracker ready for migration we'll need to:
- normalize issue labels with other dart-lang repos #59282
- align our issue priorities with SDK analyzer issue priorities
- migrate issue links in source to moved issues #59187
We might also:
- consider adding workflows to the SDK repo that take over our custom auto-labeling
Feedback and Thanks
Please provide feedback! A lot of thinking has gone into this and I'm happy to elaborate; just ask. 🙏
The quality of external contributions has been a bright light for this product (and for me personally). My sincere hope is that this move and the benefits of integration with our core source will not discourage contributions. On the contrary, I hope this will empower us to make the linter even better for all of us.
/fyi @a14n @athomas @asashour @bwilkerson @devoncarew @jacob314 @jcollins-g @parlough @srawlins @stereotype441 @whesse