I made three changes to `LintMessage` and `SuppressedLintMessage`:
1. Many places that create `LintMessage`s don't set `fatal`, so I made
it optional. This would be a breaking change if we made types part of
our exports, but in this case I believe it's updating JSDoc
documentation to reflect reality.
2. Added an optional `messageId` property that's set by reports from rules.
3. Added an optional, nullable `nodeType` property.
- Reports from rules set it to a value.
- `applyDirectives()` explicitly sets it to `null` for unused
disable directives.
- `Linter`'s `createLintingProblem()` explicitly sets it to `null`.
Two open questions:
1. Should I make `nodeType` non-nullable and update the places in the
implementation that explicitly set it to `null` to omit it instead? A
few places already omit it for e.g. parse errors or ignored file
messages, so API consumers already have to check that it might not be
set.
2. `line` and column` are currently required but possibly `undefined`.
- Ignored file messages currently omit `line` and `column`.
- `Linter` explicitly sets them to `0` for two configuration errors
(configured parser not found and no configuration found for file).
- `Linter`'s `createLintingProblem()` has a `DEFAULT_ERROR_LOC` that
defaults to line 1 column 0, but the default is only used for
missing rule definition messages.
Should I either:
a. Keep `line` and `column` required but possibly `undefined` and
update ignored file messages to explicitly set them to `0`,
following precedent elsewhere?
b. Or make `line` and `column` optional and remove fallback 0/0 or
1/0 values from configuration issues?
Option b is how I'd design the API from scratch because I wouldn't
report a location unless we had a real locationl. But it might be a
breaking change. Even though the type is specified as possibly
`undefined`, in practice, some API consumers might only see messages
that have real or fallback locations if they don't encounter ignored
file messages. Option b would slightly increase the prevalence of
location-less messages.