Commit Graph

8257 Commits

Author SHA1 Message Date
Nathan Shively-Sanders
29dbabe2e1 In JS, fix contextual type of this assignments (#26743)
in object literal methods inside an object literal with a type
annotation.

Note that this does not change:

1. The type of `this` in object literal methods.
2. The fact that this-property assignments are still declarations. They
just don't block contextual typing like most declarations do.

This change is a bit expensive. It first calls getThisContainer, which
walks the tree upward. Then it calls checkThisExpression, which will
usually call getContextualType on the object literal method. If the new
code then returns true, it will proceed to redo much of that work.

Calling checkThisExpression should not cause incorrect circularity
failures; we only have to inspect the shape of the object literal and
not the types of its properties to determine its type.
2018-08-29 15:06:38 -07:00
Andy
7b4f864b49 moduleSpecifiers: Simpler criteria for preferring relative path vs baseUrl (#25803)
* moduleSpecifiers: Simpler criteria for preferring relative path vs baseUrl

* Don't unconditonally use a path mapping
2018-08-29 15:06:26 -07:00
Anders Hejlsberg
d066e1e9e3 Merge pull request #26676 from Microsoft/complexRestParameterTypes
Improve checking of complex rest parameter types
2018-08-29 11:39:04 -07:00
Andy
02630273a2 codeFixInferFromUsage: Assume that using x[0] means that x is an array (#26739)
* codeFixInferFromUsage: Assume that using `x[0]` means that `x` is an array

* Remove unnecessary '||' with non-falsy LHS

If only there were some kind of type-checker for JavaScript that could detect this sort of thing
2018-08-29 11:37:31 -07:00
Andy
0feeb48783 Make generator function name a completion list blocker (#26640)
* Make generator function name a completion list blocker

* Improvements for class/object members

* Separate KeywordCompletionFilter.None and .All
2018-08-29 10:53:32 -07:00
Anders Hejlsberg
a2d2f5aee6 Merge branch 'master' into complexRestParameterTypes 2018-08-29 07:51:07 -07:00
Wenlu Wang
f67d7e01cf add test case and fix regression (#26726) 2018-08-29 06:58:55 -07:00
Andy
cff04e6050 Ensure JsonSourceFile has all the non-optional properties of SourceFile (#26162)
* Ensure JsonSourceFile has all the non-optional properties of SourceFile

* Set properties in parseSourceFile
2018-08-28 16:43:14 -07:00
Andy
9106fdbc47 Support signature help for type parameters of a type (#26702) 2018-08-28 14:21:09 -07:00
Andy
552bd1c8a2 Support import fix/completions for export = (#25708) 2018-08-28 13:04:11 -07:00
Andy
b94061c587 getEditsForFileRename: Avoid changing import specifier ending (#26177)
* getEditsForFileRename: Avoid changing import specifier ending

* Support .json and .jsx extensions

* Restore typeRoots tests

* Fix json test

* When --jsx preserve is set, import ".tsx" file with ".jsx" extension

* Support ending preference in UserPreferences
2018-08-28 13:03:24 -07:00
Andy
3931b72118 noUnusedLocals: Destructuring assignment is a write (#26365)
* noUnusedLocals: Destructuring assignment is a write

* Code review

* Clarify test
2018-08-28 11:43:45 -07:00
Ryan Cavanaugh
6c2e851689 Merge pull request #26317 from Kingwl/parameter-initializer-lookup-fix
add special check for parameter initializer lookup if targeting es2015+
2018-08-28 11:33:58 -07:00
Andy
b183418124 Fix bug: Don't go to *any* constructor signature for jsx element (#26715) 2018-08-28 11:06:14 -07:00
Andy
1b5de9d16e Uncomment tests fixed with #23631 (#26700) 2018-08-28 10:25:00 -07:00
王文璐
8869f39c25 accept more case 2018-08-28 16:41:26 +08:00
王文璐
d758075597 add special check for parameter initializer lookup if targeting es2015+ 2018-08-28 15:02:28 +08:00
Anders Hejlsberg
ac0d5da631 Merge pull request #26679 from Microsoft/improveGetTypeOfExpression
Improve control flow analysis of type assertions
2018-08-27 18:30:16 -07:00
Anders Hejlsberg
bd40583beb Merge pull request #26698 from Microsoft/indexedAccessConstraints
Improve indexed access type relations
2018-08-27 18:14:43 -07:00
Nathan Shively-Sanders
a2e4a282e7 Get [type] parameter types from @type tag (#26694)
* Get [type] parameter types from @type tag

Previously only the return type was used in cases like this:

```js
/** @type {<T>(param?: T) => T | undefined} */
function g(param) {
  return param;
}
```

Now the type parameters from the type tag are used, and the compiler
gets the type of the parameter by using the position in the signature of
the type tag.

Fixes #25618

* Fix split ifs according to PR comments
2018-08-27 16:52:35 -07:00
Anders Hejlsberg
9f83958dbe Add tests 2018-08-27 16:06:17 -07:00
Nathan Shively-Sanders
b50c37de78 No assert for nameless typedefs (#26695)
The assert is over-optimistic and should be removed until we can parse
every possible thing that people might put in a JSDoc type position.

Fixes #26693
2018-08-27 14:12:14 -07:00
Wesley Wigham
0dbad04c3f Distribute indexed accesses when simplifying them (#26281)
* unknownify accesses

* Move to simplify to break less with fewer changes

* Accept baselines for now

* Always propegate any as an index type

* Fix flow control in the presence of simplifiable types

* Add spy repro from #25181

* Retain errorType when it is used as a marker for the lack of a constraint

* Small refinement

* Add new test

* Move most potentially recursive types from isIdenticalTo into structuredTypeRelatedTo to match the non-identity relations

* Fix nits

* Doesnt need to be undefineable at all
2018-08-27 13:32:01 -07:00
Andy
0a59da1a2c In pickLongestCandidateSignature, instantiate using inferred type arguments (#26646) 2018-08-27 10:30:25 -07:00
Nathan Shively-Sanders
6419240ab2 Declaration emit includes function properties (#26499)
* Declaration emit includes function properties

It does this by printing the type as an object literal type:

```ts
function f() { }
f.p = 1
```

Appears in a d.ts as

```ts
declare var f: {
  (): void;
  p: number;
}
```

It would also be possible to represent it as a namespace merge. I'm not
sure which is better.

```ts
declare function f(): void;
declare namespace f {
  export var p: number;
}
```

In order to avoid a private-name-used error (though I think it was
actually *unused*), I also had to change the nodeBuilder code to match.
This is arguably harder to read. So it's possible that I should instead
keep the nodeBuilder version as `typeof f` and make an exception for
private name use.

* Emit namespace merge instead of object type

This makes the change smaller, overall.

* Fix isJSContainerFunctionDeclaration+namespace merges

Also improve emit style to match other namespace emit.

* Add isPrivate + test case from PR comments
2018-08-27 10:29:53 -07:00
Andy
e411381266 Fix bug: Don't let empty signature documentation override other documentation (#26638) 2018-08-27 09:38:52 -07:00
Anders Hejlsberg
0c759b8194 Add regression test 2018-08-25 18:25:14 -07:00
Anders Hejlsberg
09bc7505a7 Add regression test 2018-08-25 16:09:18 -07:00
Anders Hejlsberg
676892ee56 Add tests 2018-08-25 07:55:13 -07:00
Nathan Shively-Sanders
0043ba16b1 Allow weak type detection for intersection sources (#26668)
Previously, intersections were only allowed as targets, but this was
just an artifact of the original implementation, which operated inside
the structural part of isRelatedTo. Removing this restriction catches
subtle bugs in React user code, where a function named `create` returns
a mapped type whose types are all branded numbers. The display of these
properties, for some original type `T`, is not `number & { __ }` but
the much-less-obvious `RegisteredStyle<T>`.
2018-08-24 10:30:39 -07:00
Wenlu Wang
8ba501926a try get add missing member return type from context (#26250)
* try get add missing member return type from context

* support contextual type
2018-08-23 21:31:53 -07:00
Andy
f3ceebe552 Fix duplicate completions bugs (#26648)
* Fix duplicate completions bugs

* Remove old TODO
2018-08-23 18:22:07 -07:00
Nathan Shively-Sanders
6ea2278c7a Get symbol at location for class expressions/keywords (#26636)
* getSymbolAtLocation understands class expressions

Previously it did not.

* Update baselines
2018-08-23 11:27:03 -07:00
Nathan Shively-Sanders
5433cd8685 remove Animations from chrome-devtools' user test shim (#26494)
It looks like it's successfully merging with the DOM definition now
instead.
2018-08-23 09:18:06 -07:00
Nathan Shively-Sanders
03653934c3 Don't create expando object literals in TS (#26525)
Previously, getWidenedTypedFromJSPropertyAssignment was not called for
Typescript code. Since property assignments on functions, it is. That
meant that property assignments would incorrectly create a JS container
for empty object literals in a property assignment, even in Typescript:

```ts
const one = () => 1
one.p = {}
one.p.q = {} // should not work in Typescript!
```

Now empty object literals never create expando objects in Typescript,
because getJSExpandoObjectType requires the declaration to be in a JS
file.
2018-08-23 08:21:28 -07:00
Wesley Wigham
5e8b63cd1d Use context free expression types in evolving array checking and cache context free type (#26585)
* Use context free expression types in evolving array checking and cache context free type

* Simplify second test

* Low max depth a tad just so node 8 wont stack out

* By request make flow control a round number
2018-08-22 16:17:42 -07:00
Andy
194ffb3449 fourslash: Allow to verify textChanges without changing file content (#26607) 2018-08-22 15:20:33 -07:00
Ron Buckton
1f8aa057f8 Merge pull request #26483 from Microsoft/fix20594
Ensure for-in loop variable is checked
2018-08-22 11:41:17 -07:00
Anders Hejlsberg
74c57caa90 Add regression test 2018-08-22 07:16:31 -07:00
Anders Hejlsberg
93c76cb617 Merge pull request #26558 from Microsoft/fixInfiniteConstraints
Fix infinite constraints
2018-08-21 17:24:42 -07:00
Anders Hejlsberg
db9c202b64 Add regression test 2018-08-21 16:17:14 -07:00
Anders Hejlsberg
7ec98afb8f Merge pull request #26566 from Microsoft/fixStrictCoAndContraInferences
Properly handle co- and contra-variant inferences in strict mode
2018-08-21 16:11:52 -07:00
Andy
72886512a6 When --noImplicitAny is enabled, don't report errors suggesting that a 'void' function can be 'new'ed (#26579) 2018-08-21 10:02:02 -07:00
Ron Buckton
42c9208fd1 Merge pull request #26564 from Microsoft/fix26497
Emit lib reference directives in declaration output
2018-08-21 09:48:07 -07:00
Ron Buckton
1de8cd3f62 Emit lib reference directives in declaration output 2018-08-20 16:54:51 -07:00
Anders Hejlsberg
6a81d4c129 Merge branch 'master' into fixInfiniteConstraints 2018-08-20 16:30:32 -07:00
Anders Hejlsberg
886a6d7473 Fix test 2018-08-20 16:23:09 -07:00
Anders Hejlsberg
88f7759d6b Add tests 2018-08-20 16:21:25 -07:00
Anders Hejlsberg
6262ac8b3d Add tests 2018-08-20 12:41:48 -07:00
Matt McCutchen
cc1c2ab6b2 Go back to the old narrowing algorithm (pre #26143) and avoid #26130 by
skipping narrowing if the old algorithm produces a type to which the
assigned type is not assignable.

This also means we'll no longer narrow for erroneous assignments where
the assigned type is not assignable to the declared type.  This is the
reason for the numericLiteralTypes3 baseline change.

Fixes #26405.
2018-08-17 21:35:03 -04:00