Commit Graph

672 Commits

Author SHA1 Message Date
Andy
3eeb54861d Fix invalid cast (#18821) 2017-10-10 10:53:43 -07:00
Ron Buckton
dc607c29b4 Fix 'this' capturing for dynamic import 2017-10-09 17:15:13 -07:00
Andy
8a55baf9a3 In @typedef tag, handle property with no type (#19013) 2017-10-09 09:58:02 -07:00
Andy
71f8852124 Have getNameOfDeclaration return x for export default x. (#18616) 2017-10-06 14:29:45 -07:00
Andy
683d6c7ddd Add helper functions for using unescapeLeadingUnderscores (#18793)
* Add helper functions for using `unescapeLeadingUnderscores`

* More cleanup
2017-09-29 09:57:31 -07:00
Wesley Wigham
5353475fce Always collect type and symbol baselines (#18621)
* Always generate type & symbol baselines

* Accept changed shadowed baselines

* Accept brand new type and symbol baselines

* Allow `getTypeAtLocation` to return undefined in the type writer

* Accept baselines which had missing type information

* Bind container for dynamically names enum members so they may be printed

* Accept type/symbol baselines for enums with computed members

* First pass at reducing typeWriter memory overhead

* Use generators to allow for type and symbol baselines with no cache

* Accept new baselines for tests whose output was fixed by better newline splitting

* Hard cap on number of declarations printed, cache declaration print text

* handle differing newlines better still to handle RWC newlines

* Lower abridging count, accept abridged baselines

* Limit max RWC error output size, limit RWC type and symbol baseline input size

* Move skip logic into type and symbol baseliner to streamline error handling

* Accept removal of empty baselines

* Canonicalize path earlier to handle odd paths in input files

* Do canonicalization earlier still, also ensure parallel perf profiles for different targets do not trample one another

* No need to pathify again
2017-09-22 15:52:04 -07:00
Anders Hejlsberg
8c64937888 Merge pull request #18153 from Microsoft/optimizeArrays
Optimize array operations to reduce memory footprint
2017-09-07 22:26:48 +01:00
Wesley Wigham
c1f2afd645 Add typedef declaration space, unify typedef name gathering (#18172)
* Add typedef declaration space, unify typedef name gathering, strengthen errorUnusedLocal

* Bonus round: make jsdoc presence way mroe typesafe

* Be exhaustive in nameForNamelessJSDocTypedef

* Remove nonrequired casts

* Replace more casts with guards

* Cannot be internal

* Debug.fail returns never, assert never no longer needs unreachable throw to satisfy checker

* Rename type

* Add replacement message as in 18287
2017-09-07 10:28:58 -07:00
Anders Hejlsberg
3f090114ff Optimize array operations to reduce memory footprint 2017-08-30 09:44:51 -07:00
Andy
b3f3f336ad Use hasModifier and hasModifiers helper functions (#17724) 2017-08-11 07:15:15 -07:00
Andy
08fbcd8b80 Fix many no-object-literal-type-assertion lint errors (#17278)
* Fix many no-object-literal-type-assertion lint errors

* Simple fixes

* Use a union for FlowNode

* PR feedback and remove remaining `id()` uses

* Use a union for CodeBlock

* Discriminate CodeBlock by CodeBlockKind
2017-08-10 12:52:15 -07:00
Tingan Ho
81fb3f702a Addresses CR feedback 2017-08-01 22:10:12 +02:00
Tingan Ho
b917eb0225 Adds optional catch parameter into the compiler 2017-07-30 23:26:47 +02:00
Nathan Shively-Sanders
9fd90e7e02 Merge branch 'master' into jsdoc-param-type-literals 2017-07-26 11:09:24 -07:00
Andy
30d973bdcb Rename symbol.name to escapedName and make name unescaped (#17412) 2017-07-25 14:22:26 -07:00
Nathan Shively-Sanders
c55a043767 Address PR comments from Andy
I'll take a look at Wesley's next and see if those require any changes.
2017-07-25 14:14:12 -07:00
Andy
eadd084c82 Add 'name' property to Identifier (#17329)
* Add 'name' property to Identifier

* Rename to unescapedText

* Rename 'id.text' to 'id.escapedText'

* Rename 'id.unescapedText' to 'id.text'

* Make escapeIdentifier and unescapeIdentifier do nothing
2017-07-25 13:16:34 -07:00
Nathan Shively-Sanders
7ff91c1e1c Parse jsdoc type literals in params
Now Typescript supports the creation of anonymous types using successive
`@param` lines in JSDoc:

```js
/**
 * @param {object} o - has a string and a number
 * @param {string} o.s - the string
 * @param {number} o.n - the number
 */
function f(o) { return o.s.length + o.n; }
```

This is equivalent to the Typescript syntax `{ s: string, n: number }`,
but it allows per-property documentation, even for types that only need
to be used in one place. (`@typedef` can be used for reusable types.)

If the type of the initial `@param` is `{object[]}`, then the resulting
type is an array of the specified anonymous type:

```js
/**
 * @param {Object[]} os - has a string and a number
 * @param {string} os[].s - the string
 * @param {number} os[].n - the number
 */
function f(os) { return os[0].s; }
```

Finally, nested anonymous types can be created by nesting the pattern:

```js
/**
 * @param {Object[]} os - has a string and a number
 * @param {string} os[].s - the string
 * @param {object} os[].nested - it's nested because of the object type
 * @param {number} os[].nested.length - it's a number
 */
function f(os) { return os[0].nested.length; }
```

Implementation notes:

1. I refactored JSDocParameterTag and JSDocPropertyTag to
JSDocPropertyLikeTag and modified its parsing to be more succinct. These
changes make the overall change easier to read but are not strictly
required.
2. parseJSDocEntityName accepts postfix[] as in `os[].nested.length`,
but it doesn't check that usages are correct. Such checking would be
easy to add but tedious and low-value.
3. `@typedef` doesn't support nested `@property` tags, but does support
`object[]` types. This is mostly a practical decision, backed up by the
fact that usejsdoc.org doesn't document nested types for `@typedef`.
2017-07-21 14:04:14 -07:00
Andy
cfa94c2d34 Binder: handle JS property assignment that comes after a method declaration with the same name (#16830) 2017-07-19 09:11:50 -07:00
Andy
194c2bc2ca Make NodeArray readonly (#17213)
* Make NodeArray readonly

* Fix bug: use emptyArray instead of undefined

* Fix bug: Don't expose MutableNodeArray

* Undo trailing whitespace changes
2017-07-18 10:38:21 -07:00
Wesley Wigham
695514290f Fix #17023 (#17180)
* Fix #17023

* Be more general when handling matching references through binding elements

* Better cache key, PR feedback

* Deeper tests, better cache key handling
2017-07-18 09:12:25 -07:00
Nathan Shively-Sanders
6e861fd3e6 Remove JSDocConstructor/ThisType and just use named parameters 2017-07-14 09:36:12 -07:00
Nathan Shively-Sanders
bc69c7e6d1 Parse JSDoc types using the normal TS parser
This means that JSDoc types can include the full range of Typescript
types now. It also means that Typescript annotations can include JSDoc
types. This is disallowed with a new error, however. But Typescript can
still give the correct types to JSDoc that shows up in .ts files by
mistake. This can easily happen, for example with types like

```ts
var x: number? = null;
var y: ?string = null;
var z: function(string,string): string = (s,t) => s + t;

// less likely to show up, but still understood.
var ka: ? = 1;
```

In the future, I will add a quick fix to convert these into the correct
types.

Fixes #16550
2017-07-13 11:27:50 -07:00
Andy
c6a6467073 Remove unneeded ExportType and ExportNamespace flags (#16766) 2017-07-13 09:21:13 -07:00
Andy
e6256d43c4 Inline getDestructuringParameterName (#16973) 2017-07-07 10:34:50 -07:00
Andy
17578e8a5d Use Map<true> for sets (#16972) 2017-07-07 10:34:36 -07:00
Wesley Wigham
4e6b2f3c93 Created a branded type for identifier-escaped strings (#16915)
* Created a branded type for escaped strings

Then flowed it throughout the compiler, finding and fixing a handful of
bugs relating to underscore-prefixed identifiers in the process.
Includes a test for two cases noticed - diagnostics from conflicting
symbols from export *'s, and enum with underscore prefixed member emit.

* Correctly double underscores WRT mapped types

* Add fourslash tests for other fixed issues

* use function call over cast

* Update forEachEntry type accuracy

* Just use escaped names for ActiveLabel

* Remove casts from getPropertyNameForPropertyNameNode

* This pattern has occurred a few times, could use a helper function.

* Remove duplicated helper

* Remove unneeded check, use helper

* Identifiers list is no longer escaped strings

* Extract repeated string-getting code into helper

* Rename type and associated functions

* Make getName() return UnderscoreEscapedString, add getUnescapedName()

* Add list of internal symbol names to escaped string type to cut back on casting

* Remove outdated comments

* Reassign interned values to nodes, just in case

* Swap to string enum

* Add deprecated aliases to escapeIdentifier and unescapeIdentifier

* Add temp var

* Remove unsafe casts

* Rename escaped string type as per @sandersn's suggestion, fix string enum usages

* Reorganize double underscore tests

* Remove jfreeman from TODO

* Remove unneeded parenthesis
2017-07-06 14:45:50 -07:00
Nathan Shively-Sanders
b1af566396 Remove unused code in bindWorker 2017-06-29 16:30:44 -07:00
Andy
d73b05cc63 Fix typo (#16826) 2017-06-29 10:06:35 -07:00
Andy
537695c313 In TypeScript code, never bind JSDoc normally, just set parent pointers (#16555) 2017-06-15 10:02:16 -07:00
Andy
fbcddb61e2 Don't bind JSDoc namespace in a TS file (#16416) 2017-06-12 14:35:35 -07:00
Andy
2748b3b334 Add isForInOrOfStatement utility (#16455) 2017-06-12 11:08:41 -07:00
Andy
13b7d17da7 Don't bind JSDoc type parameter in a TS file (#16413)
* Don't bind JSDoc type parameter in a TS file

* Fix tests

* Remove unnecessary non-null assertions
2017-06-09 14:52:01 -07:00
Yui T
b9017795a0 Revert "Revert "[Master] wip-dynamic import" (#16264)"
This reverts commit ccc60c8b3b.
2017-06-05 17:16:29 -07:00
Mohamed Hegazy
ccc60c8b3b Revert "[Master] wip-dynamic import" (#16264) 2017-06-05 10:49:20 -07:00
Yui T
2f476bf22f Merge branch 'master' into master-dynamicImport 2017-06-02 09:10:20 -07:00
Yui T
d68038ad28 Support bracket for optional property 2017-05-25 22:34:48 -07:00
Yui T
23be471def Fix linting 2017-05-25 21:52:23 -07:00
Yui T
cabe4d3606 Address PR 2017-05-25 19:49:04 -07:00
Kanchalai Tanglertsampan
348fc7e51e Take into account optional property in parameter 2017-05-24 16:37:02 -07:00
Kanchalai Tanglertsampan
faab927c8d Merge branch 'master' into master-dynamicImport
# Conflicts:
#	src/compiler/checker.ts
#	src/compiler/emitter.ts
#	src/compiler/parser.ts
#	src/compiler/transformers/module/module.ts
#	src/compiler/transformers/module/system.ts
2017-05-24 11:26:06 -07:00
Ika
f9a1fca388 Add missing emitter for NamespaceExportDeclaration (#16025) 2017-05-23 11:07:34 -07:00
Nathan Shively-Sanders
515a0e8446 Merge pull request #15958 from Microsoft/make-getNameOfDeclaration-public
Make getNameOfDeclaration public
2017-05-22 10:32:46 -07:00
Nathan Shively-Sanders
fea8561d1b Remove dead code from binder
`getNameOfDeclaration` now handles a lot of the special property
assignment kinds in `getDeclarationName`
2017-05-22 10:06:35 -07:00
Andy Hanson
ba884bc27b Merge branch 'master' into jsdoc 2017-05-19 08:14:52 -07:00
Andy Hanson
8afe9fcc72 Separate bind worker for JSDoc nodes, and only enter it if in a JS file 2017-05-19 08:12:55 -07:00
Andy Hanson
0ff187c8ac Remove 'isDeclarationFile()' function, use '.isDeclarationFile' 2017-05-17 08:12:23 -07:00
Andy Hanson
0c60824860 Set @typedef parent pointer, but still do not bind a symbol 2017-05-17 08:02:07 -07:00
Andy Hanson
38784b761a Support for JSDoc in services 2017-05-15 14:45:30 -07:00
Nathan Shively-Sanders
9392342f78 Switch to Declaration/NamedDeclaration hierarchy 2017-05-08 15:07:50 -07:00