Open
Description
Coverage Reporting
- C8
- Coverage system that wraps V8, the JS engine Node uses.
- We currently have a task like this where you can run
npm tests -- --no-lint --coverage
. - Problem: when you bundle our entire codebase with esbuild, the file is huge. The built-in tools for C8 don't work well for processing a coverage report on TypeScript.
- Monocart: a different preview tool that not only can preview the entire produced file, but can work with sourcemaps and give details on branches that are or are not hit.
- Also has an output mode for codecov, a service to track code testing coverage.
- Probably don't want to have the comment that says "your coverage has fallen!" and gates merging, but we do want a coverage report.
- Downside: it makes CI run slower (doubles it!).
- Would be great to figure out "which tests rely on a given branch executing?"
- VS Code might be exploring this with API: Attributable Test Coverage vscode#212196
- Why are we doing this if we don't want to actually make it visible?
- Good question.
- We have >97% coverage of the checker, but many many uncovered branches.
- We want to wait on ways to make this all run faster before it's in CI - but first let's add an optional peer dep to c8 so people can run it locally.
Knip
- Utility to flag down functions not used outside the file, drop unused files, and drop utilities that are not used but also not exported as part of the public API.
- Make exceptions by adding a
/** @knipignore */
tag to the preceding comment. - Last time we talked about this, wasn't there an installation time delay?
- Yes, but since then knip has shaved down its dependency tree.
- What about running time?
- About 7s - not bad.
- We're thinking of just doing it in CI.
@internal
Tagging
- Basically a way to formally encode what
--stripInternal
is supposed to do, and say it only applies to JSDoc comments.- Allows you to write
// Do not add an @internal tag to the next declaration
, since TypeScript will now consider that unrelated.
- Allows you to write
- With
--stripInternal
, we've always said "it has bugs, ehhh, arguable behavior." - This is a way to make it more formal - or at least more predictable.
- Does this add overhead because we'd now start to ask for JSDoc comments in emit.
More "Primitive" Operations in Core Utilities
- Started out with a trace where the internal
some
function was just a big hot path. - Lots of operations that implicitly do more work than you might expect - but have decent alternatives.
||
checks for truthiness, but??
only checks fornull
/undefined
.- Explicit checks for
undefined
are faster than truthiness. for
-of
loops create iterators butfor (let i = 0; i < arr.length; i++)
doesn't.
- PR makes some changes, mostly isolated to
core.ts
to avoid too much noise. - Unfortunate that there's no free lunch here. The abstraction comes at an explicit cost.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment