* Add unqualified JSDoc member references
This allows unqualified references like:
```ts
class Zero {
/** @param buddy Must be {@link D_HORSE} or {@link D_DOG}. */
deploy(buddy: number) { }
static D_HORSE = 1
static D_DOG = 2
}
```
I surveyed @see and @link again to estimate how common this is. I found
a little over 200 uses, which is around 2%. Sorted by frequency, this
*is* the next feature on the list, along with the `module:` prefix.
So I think this is about the right point to stop adding code.
In this case, however, I liked most of the uses -- there were a lot
of deprecated functions that referenced a function just below, where it
would be wordy to qualify the name, but the reader would benefit from a
link.
Note that unqualified references do *not* work inside type or object
literals. The code I ended up with is quite complicated and I didn't
observe any uses in the wild.
Fixes#43595
* Remove type/object literal container check
Since they don't work anyway
* Cache parsed path mapping patterns
If a project has many of them (e.g. 1800), parsing the patterns
repeatedly can take up a lot of time.
* Move cache to ConfigFileSpecs
* Inline constants
* Simplify cache access
* Simplify or optimize regexes with polynomial time worst cases
* PR feedback & cleanup
Co-authored-by: David Michon <dmichon-msft@users.noreply.github.com>
* Use builtin scanner function for checking whitespace in fallback method (its faster)
Co-authored-by: David Michon <dmichon-msft@users.noreply.github.com>
* Ensure static index signatures have an errorNode available
* Lookup static index signature declarations in the right symbol table, stop checking prototype props
* Add @linkcode and @linkplain tags
They are just like @link tags but request fixed-width and normal
presentation, respectively.
Fixes#43935
* revert JSDocComment -> JSDoc SyntaxKind rename
* update API baselines
* fix lint
* Kick out of normalizePath if there's nothing to do
...using `relativePathSegmentRegExp`.
Bonus: use a regex to handle "/./" to avoid splitting and joining in a
common case.
When building the compiler, for example, it looks like ~95% of arguments
to `normalizePath` do not require any normalization.
* Check normalization before and after . cleanup
* Also cleanup leading ./
* support QualifiedName when narrowing inside loops
* add test
* narrow more qualified names
* handle `undefined` of `getFlowCacheKey `
* update comments in test
* Make normalizeSlashes a no-op there are no bad slashes
On Windows, there will probably be a negligible slowdown, iterating over
the pre-slash prefix of each unnormalized path (though we might come out
ahead if paths are normalized more than once).
On *nix, this saves work - 1.8s -> 0.4s in the project I'm
investigating.
* Reuse already-computed index
* Everything mostly works
A couple of mixed, nested references don't work yet.
The scanner+parser interaction is wrong, the parser consumes one too
many spaces, and the checker+services code needs a little cleanup.
* Cleanup
1. I decided that correctly parsing a#b.c, an entity name containing an
instance reference, is not worth the work.
2. I made the scanner, at least the jsdoc part, emit a # token, and
provided a reScanPrivateIdentifier in order to convert #a to # a.
3. I cleaned up the code in the checker.
2. Unrelated: I added a missing space in linkPart display.
* Cleanup lint + var naming
* investigate+clean up a couple of TODOs
* Fix lint in utilities.ts
* change name to JSDocMemberName
* address PR comments
* Private identifiers use standard identifer scanning
Previously they used an old copy of the identifier scanning code that
didn't handle extended unicode yet.
* gotta fix that const lint
* First draft
Everything works, the error messages for unmatched opening elements
could still use improvement, plus there is tonnes of unused and ugly
code.
1. Make sure the parser can recover from all kinds of unclosed tags.
2. Improve the parse tree for unmatched opening tags.
3. Better errors at some point.
* Lots of cleanup
* Improve readability of construction/fix lint
* improve line-length formatting
* Test normal char code array for source mappings
* Limit buffer size, minor performance tweaks
* Always commit at exactly chunk size
Co-authored-by: David Michon <dmichon-msft@users.noreply.github.com>
* Cache accessibe symbol chains, type parameter name generation
* Move signature declaration helper length approximation to start of function
* Add node result caching internal to `typeToTypeNodeHelper`
* Suggestion from PR
* Test showing the moduleResolutionCache reset issue with tsc --b --w
* Fix incorrect usage of ownMap by making it function returning ownMap instead of constant value
* Improve errors for incorrectly nested export default
The compiler and services don't handle incorrectly nested
`export default` well right now:
```ts
export = (x,y) => {
export default { }
}
```
Asking for document highlights, find all references or quick info on
'export' or 'default' cause a crash. After the crash is fixed, the error
message is confusing and wrong: "An export assignment cannot be used outside a module."
This PR:
1. Skips document highlights for incorrectly nested export default.
2. Skips find all refs for incorrectly nested export default.
3. Switches the fallback binding for incorrectly nested export default
from Alias to Property. Neither is correct, but Property doesn't cause a
crash in alias resolution.
4. Improves the error message to reflect a post-ES module world, which
has export default and 'module' means 'ES module', not 'namespace'.
Fixes#40082 and the related bugs mentioned above.
* address PR comments
PR #42556 was a nice optimization that dramatically sped up comparisons of discriminated unions. Unfortunately, the cost of determining whether a union is discriminated can be prohibitively high. In particular, an internal team with a very large repo saw their type count double and their memory usage increase from 6GB to 9GB, breaking their build. This changes splits the difference by not trying to compute the property types of intersection types - a notoriously slow operation.
* Fix package.json auto imports for pnpm without project references
* Make property optional
* Revert unnecessary unnittest change
* Set symlinked files when setting symlinked directories
* Update `typeDirectiveIsEqualTo`
* Consider symlinks found during type reference directive resolution into `discoverProbableSymlinks`
* Rename `originalFileName` to `originalPath`, make internal
* Allow filterType to consider union constraints of non-union types when determining never-ness
* Move impl to callback
* Baseline change in narrowing behavior into test, fix post-LKG build
* Test where allowJs present in referenced project affects picking up right set of import files
* use options from referened project for including resolved imports in the file when using sources of project reference
Fixes#43909
* Test where relative import isnt ideal in the declaration emit
* use project relative preference for declaration emit
Fixes#39117
* Fix incorrect path matching when calculating module specifier
* Use correct baseUrl for the module specifier
* Handle localness in special cases by checking exported variable assignment
Fixes#42976
* Fix existing tests where arrow now behaves similar to function expression
* Update src/services/goToDefinition.ts
Previously, getExternalModuleMember passed through its received value of
`dontResolveAlias` to every function that accepted it. That includes (1)
resolution of the module symbol and (2) resolution of the module
specifier. However, in TS, the module symbol is never an alias anyway, so
dontResolveAlias doesn't make a difference. In JS, the module symbol
*can* be an alias, and it should always be resolved. That's what this PR
does.
Fixes#43713