* Support some late-bound special property assignments
* Integrate PR feedback
* PR feedback
* Enable declaration on core tests
* Specialize type of binary expression used for late binding, speculative fix to navigation bar, merge check and type for elem/property accesses
* Add test showing current nav bar behavior (specifically the lack thereof)
* Move package.json related utils to utilities
* Add failing test
* Make first test pass
* Don’t filter when there’s no package.json, fix scoped package imports
* Use type acquisition as a heuristic for whether a JS project is using node core
* Make same fix in getCompletionDetails
* Fix re-exporting
* Change JS node core module heuristic to same-file utilization
* Remove unused method
* Remove other unused method
* Remove unused triple-slash ref
* Update comment
* Refactor findAlias to forEachAlias to reduce iterations
* Really fix re-exporting
* Use getModuleSpecifier instead of custom hack
* Fix offering auto imports to paths within node modules
* Rename things and make comments better
* Add another reexport test
* Inline `symbolHasBeenSeen`
* Simplify forEachAlias to findAlias
* Add note that symbols is mutated
* Symbol order doesn’t matter here
* Style nits
* Add test with nested package.jsons
* Fix and add tests for export * re-exports
* Don’t fail when alias isn’t found
* Make some easy optimizations
* Clean up memoization when done
* Remove unnecessary semicolon
* Make getSymbolsFromOtherSourceFileExports pure
* Cache auto imports
* Revert "Cache auto imports"
This reverts commit 8ea4829587.
* Handle merged symbols through cache
* Be safer with symbol declarations, add logging
* Improve cache invalidation for imports and exports
* Check symbol presence first
* Only run cache invalidation logic if there’s something to clear
* Consolidate cache invalidation logic
* Fix reuseProgramStructure test
* Add more logging
* Only clear cache if symbols are different
* Refactor ambient module handling
* Start caching package.json stuff
* Support package.json searching in fourslash
* Move import suggestions cache to Project
* Start making more module specifier work available without having the importing file
* Going to backtrack some from here
* Get rid of dumb cache, fix node core modules stuff
* Start determining changes to a file have invalidated its own auto imports
* Move package.json related utils to utilities
* Add failing test
* Make first test pass
* Don’t filter when there’s no package.json, fix scoped package imports
* Use type acquisition as a heuristic for whether a JS project is using node core
* Make same fix in getCompletionDetails
* Fix re-exporting
* Change JS node core module heuristic to same-file utilization
* Remove unused method
* Remove other unused method
* Remove unused triple-slash ref
* Update comment
* Refactor findAlias to forEachAlias to reduce iterations
* Really fix re-exporting
* Use getModuleSpecifier instead of custom hack
* Fix offering auto imports to paths within node modules
* Rename things and make comments better
* Add another reexport test
* Inline `symbolHasBeenSeen`
* Simplify forEachAlias to findAlias
* Add note that symbols is mutated
* Symbol order doesn’t matter here
* Style nits
* Add test with nested package.jsons
* Fix and add tests for export * re-exports
* Don’t fail when alias isn’t found
* Make some easy optimizations
* Clean up memoization when done
* Remove unnecessary semicolon
* Make getSymbolsFromOtherSourceFileExports pure
* Cache auto imports
* Revert "Cache auto imports"
This reverts commit 8ea4829587.
* Handle merged symbols through cache
* Be safer with symbol declarations, add logging
* Improve cache invalidation for imports and exports
* Check symbol presence first
* Only run cache invalidation logic if there’s something to clear
* Consolidate cache invalidation logic
* Fix reuseProgramStructure test
* Add more logging
* Only clear cache if symbols are different
* Refactor ambient module handling
* Finish(?) sourceFileHasChangedOwnImportSuggestions
* Make package.json info model better
* Fix misplaced paren
* Use file structure cache for package.json detection when possible
* Revert unnecessary changes in moduleSpecifiers
* Revert more unnecessary changes
* Don’t watch package.jsons inside node_modules, fix tests
* Work around declaration emit bug
* Sync submodules?
* Delete unused type
* Add server cache tests
* Fix server fourslash editing
* Fix packageJsonInfo tests
* Add node core modules cache test and fix more fourslash
* Clean up symlink caching
* Improve logging
* Function name doesn’t make any sense anymore
* Move symlinks cache to host
* Fix markFileAsDirty from ScriptInfo
* Mark new Project members internal
* Use Path instead of fileName
* Rename AutoImportSuggestionsCache
* Improve WatchType description
* Remove entries() from packageJsonCache
* Fix path/fileName bug
* Also cache symlinks on Program for benefit of d.ts emit
* Let language service use Program’s symlink cache
* Support template literals in enum declarations
* Support template literals in const enum access
* Support template literals in swith with typeof narrowing
* Support template literals in element access discriminant
* Support template literals in ambient module declaration
* Unify symbols for template literals in computed properties
* Unify expression position checks for template literals
* Support template literals in rename and find all references
* Mark computed properties with template literals as write access
* Inline startsWithQuote
* Allow allowJs and declaration to be used together
This intorduces a new symbol-based declaration emitter - currently this
is only used for JSON and JavaScript, as the output is likely worse than
what the other declaration emitter is capable of. In addition, it is
still incomplete - it does not yet support serializaing namespaces.
* Add tests for various import/export forms, add notes on export as namespace and fix export * from
* Tests & fixes for computed names
* Add test with current @enum tag behavior
* fix declaration emit for jsdoc @enum tags
* Small adjustments to base class serialization to fix bugs in it
* Guard against type/type parameter confusion when using typeParameterToName a bit
* Integrate feedback from PR
* Fix issue with export= declarations visibility calculation and type declaration emit that impacted all forms of declaration emit
* Only make one merged getCommonJsExportEquals symbol for a symbol
* Support preserving type reference directives in js declarations
* Skip declare mdoifiers for namespace members in ambient contexts
* FAKE ALIASES AND NAMESPACES EVERYWHERE
* Dont do namespace sugar when type members contain keyword names
* Fix json source file export modifier under new output
* Such clean nested aliasing, very wow
* Fix lint
* Add visibility errors, reuse type nodes where possible
* Suppoer having correctly named import types in bundled js declaration emit & adjust binding to allow namespaces with aliases to merge when the aliases look to be type-only
* Better support for module.exports = class expression
* Fix discovered crash bug
* Allow export assigned class expressions to be reachable symbols from external declarations
* Add missing semicolon
* Support @enum tag post-merge
* preserve comments on signatures and declarations where possible
* Basic support for js classy functions
* Add example we should do better with
* Prototype assignments make things a bit wonky, but the example from the PR seems OK
* Make a ton of changes to support the new way js classes are bound
* Remove some old comments, fix import and export default names
* Fix bug in object define handling and add tests for object define property declaration emit
* Fix organization nits from PR comments
* Preserve comments from jsdoc declarations on properties and js declaration type aliases
* Merge export declarations with identical specifiers
* Remove completed TODO comment
* Split lint
* Remove now-unused function
* PR feedback
* Add some project references tests, remove some checks from project refs codepaths that are now invalid
* Update project references tests again
* Merge and update project references tests
* Rename case
* Update test to include declaration output
* Remove yet another project refernces redirect extension check
* Update comment
* Add additional import ref to test
* Add shorthand prop to test
* Fix comment text
* Extract var to temp
* Simplify function and add whitespace
* Update project refs test to use incremental edit entry
* Stylistic refactors in the symbol serializer
* Another round of PR feedback, mostly style, small bugfix with constructors, and test showing bug in export assigned class expression name shadowing
* Use x instead of index
* Disallow property/accessor overrides
Unless the base property or accessor is abstract
* Disallow uninitialised property overrides
This causes quite a few test breaks. We'll probably want to revert many
of them by switching to the upcoming `declare x: number` syntax.
* Updates from design review + fix ancient bug
1. Don't error when overriding properties from interfaces.
2. Fix error when overriding methods with other things. This had no
tests so I assume that the code was always dead and never worked.
* Need to add a couple of errors and squash one
Will update after checking out other branch for a minute
* Everything works so far
Need to test properties initialised in constructor
* Check for constructor initialisation
* change error wording
* Improve error wording
* Add codefix to add missing 'declare'
* Always emit accessors in .d.ts files
* Allow 'declare' on any uninitialised property decl
* Undo code moves
* Let sleeping dogs lie
* Correctly set NodeFlags.Ambient
And simplify redundant parts of check.
* Remove more unneeded code
* Update baselines
* Update baselines
* Update baselines
* Ignore this-property assignments
* Fix base-in-interface check
* Do not error when base parent is interface
* Fix base interface check
* Add missed baselines
* Fix check
* Fix new errors in services
* Fix new errors in services
* Fix errors in testRunner
* Add flag and turn off errors when on
* Structure of new emit is correct, fake content
It is 'hi'.
* Basically right emit
* Fix one last unitialised property declaration
* Haha no I missed another one
* Fix whitespace back to CRLF
* Minor fix and code cleanup
* New test case
* Fix bug in isInitializedProperty
* Updates from design meeting.
1. Change flag name to useDefineForClassFields (and flip polarity).
2. Forbid ES3 + useDefineForClassFields (since there is no
defineProperty).
3. Forbid overriding an abstract property-with-initializer with an
accessor.
* Update baselines
* Object.defineProperty for methods too
Using code from Ron from his upcoming refactor of the factory functions.
* Update slow baselines
* Improve error message
* Update src/compiler/transformers/utilities.ts
Co-Authored-By: Andrew Branch <andrewbranch@users.noreply.github.com>
* Add test of computed properties
* Remove done TODO
* Add UserPreferences for semicolons
* Prototype formatter semicolon removal
* Implement semicolon insertion
* Fix existing tests
* Start adding tests
* Fix some edge cases of semicolon deletion
* Fix semicolon removal before comments
* Fix indentation
* Test on checker
* Replace semicolon-omitting writer with formatter preference
* Fix writing new nodes, update protocol
* Rename option
* Really fix formatting synthetic nodes
* Fix refactoring misses
* Un-update submodules gahhhh
* Update APIs
* Update for ESLint
* Revert accidental test change
* De-kludge deduplication of EOF processing
* Omit last element semicolon from single-line object-like types
* Revert "Omit last element semicolon from single-line object-like types"
This reverts commit 5625cb0237.
* Fix straggler test
* Add test for leading semicolon class members
* Rename a lot of stuff for clarity
* Invert some boolean logic
* show more items in navbar
* fixed missing node kind for property assignments
* updated navBarNestedCommonJsExports test
* updated navigationBarMerging_grandchildren test
* updated navigationBarItemsFunctions test
* updated navigationBarAnonymousClassAndFunctionExpressions test
* updated navigationBarFunctionIndirectlyInVariableDeclaration test
* updated navigationBarInitializerSpans test
* updated navigationBarItemsPropertiesDefinedInConstructors test
* updated tests
* change nav icon for properties with function-like initializers
* add test case for binding element with function-like initializer
* add navigationBarNestedObjectLiterals test
* add navigationBarFunctionLikePropertyAssignments test
* made some silly names less silly (?)
* added SpreadAssignments and ShorthandPropertyAssignments
* new wording for primary menu items
`Number.MAX_SAFE_INTEGER` is `2 ** 53 - 1`, so anything greater than that is a 'dangerous' integer to store as a traditional number. This adds a codefix to suggest converting them to a `bigint` literal.
* Changed outlining to better outline ES5 classes (functions assigned to prototype)
* Changed outlining to better outline ES5 classes (properties assigned to functions)
* Fixed some small bugs when merging es5 class nodes. Added tests for new es5 class outline.
* Added support for interlaced ES5 classes (where an ES5 class's members are mixed with other declarations).
* Fixed crash in outline when assigning {} to the prototype.
* Added support for nested es5 declarations.
* Added support for prototype assignment for es5 classes.
* Add test case
* Fix infer from usage property assignment
Property assignment and shorthand property assignment were incorrectly
treated differently; both have ObjectLiteralExpression as a parent, but
the code previously assumed that property assignments had
ObjectLiteralExpression as parent.parent.
Also make fourslash directives case insensitive and less whitespace
sensitive.
* Add "incorrect 3-slash" error to fourslash parsing.
It was overly permissive and ended up making a mess of C#-style
comments:
`/// <summary>Text</summary>`
Now it checks the element name. Attribute names remain unchecked.
* Improve codeFixAll for add missing await
* Improve add missing await for initializers and fix-all
* Fix when only one side of a binary expression can have its initializer fixed
* Initial implementation
The original test passes but I haven't run any other tests yet, so I
assume the world is now broken.
* Append constructor function construct sigs
Instead of overwriting them
* Grab bag of improvements.
1. Mark @class-tagged functions with Class too.
2. Only gather local type parameters of constructor functions.
3. Remove getJSClassType calls with getDeclaredTypeOfSymbol.
4. Add a couple more failing tests.
getDeclaredTypeOfClassOrInterface now needs to understand prototype
assignment. That's next, I think.
* Prototype assignments work now
1. Binder marks prototype assignments as Class now.
2. Checker merges prototype assignments using the same merge code as for
functions and their declarations. No more intersections.
Many fewer failing tests now.
* Mark prototype-property assignments as Class
Even if there are no this-property assignments in them. (Then why are
you using a class?).
* Simplify getJSClassType, remove calls to its guts
It's probably not needed because now it's just a conditional call to
getDeclaredTypeOfSymbol, and I think most callers already know whether
they have a JS constructor function beforehand.
* isJSDocConstructor doesn't need to check prototype anymore
Because all the properties are merged during getDeclaredTypeOfSymbol.
* outer type parameter lookup follow prototype assignment
* this-type and -expression support in ctor funcs
Pretty cool!
* Fix remaining tests
* Fix minor lint
* Delete now-unused code
* Add class flag to nested class declarations
Also remove old TODOs