Commit Graph

10958 Commits

Author SHA1 Message Date
Godfrey Chan
cc2dc3acb0 Emit more efficient/concise "empty" ES6 ctor
When there are property assignments in a the class body of an inheriting
class, tsc current emit the following compilation:

```ts
class Foo extends Bar {
  public foo = 1;
}
```

```js
class Foo extends Bar {
  constructor(…args) {
    super(…args);
    this.foo = 1;
  }
}
```

This introduces an unneeded local variable and might force a reification
of the `arguments` object (or otherwise reify the arguments into an
array).

This is particularly bad when that output is fed into another transpiler
like Babel. In Babel, you get something like this today:


```js
var Foo = (function (_Bar) {
  _inherits(Foo, _Bar);

  function Foo() {
    _classCallCheck(this, Foo);

    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    _Bar.call.apply(_Bar, [this].concat(args));
    this.foo = 1;
  }

  return Foo;
})(Bar);
```

This causes a lot of needless work/allocations and some very strange
code (`.call.apply` o_0).

Admittedly, this is not strictly tsc’s problem; it could have done a
deeper analysis of the code and optimized out the extra dance. However,
tsc could also have emitted this simpler, more concise and semantically
equivalent code in the first place:


```js
class Foo extends Bar {
  constructor() {
    super(…arguments);
    this.foo = 1;
  }
}
```

Which compiles into the following in Babel:

```js
var Foo = (function (_Bar) {
  _inherits(Foo, _Bar);

  function Foo() {
    _classCallCheck(this, Foo);

    _Bar.apply(this, arguments);
    this.foo = 1;
  }

  return Foo;
})(Bar);
```

Which is well-optimized (today) in most engines and much less confusing
to read.

As far as I can tell, the proposed compilation has exactly the same
semantics as before.

Fixes #10175
2016-08-06 23:24:44 -07:00
Anders Hejlsberg
37e96b3a06 Stricter check for discriminant properties in type guards 2016-08-06 09:01:35 -07:00
Yui
2627e6f3fc [Transforms] Merge master on 08/05 (#10182)
* Fix #10083 - allowSyntheticDefaultImports alters getExternalModuleMember (#10096)

* Add a helper function `getOrUpdateProperty` to prevent unprotected access to Maps.

* Limit type guards as assertions to incomplete types in loops

* Accept new baselines

* Fix linting error

* [Release-2.0] Fix 9662: Visual Studio 2015 with TS2.0 gives incorrect @types path resolution errors (#9867)

* Change the shape of the shim layer to support getAutomaticTypeDirectives

* Change the key for looking up automatic type-directives

* Update baselines from change look-up name of type-directives

* Add @currentDirectory into the test

* Update baselines

* Fix linting error

* Address PR: fix spelling mistake

* Instead of return path of the type directive names just return type directive names

* Remove unused reference files: these tests produce erros so they will not produce these files (#9233)

* Don't allow properties inherited from Object to be automatically included in TSX attributes

* Port PR #10016 to Master (#10100)

* Treat namespaceExportDeclaration as declaration

* Update baselines

* wip - add tests

* Add tests

* Show "export namespace" for quick-info

* Update baselines from merging
2016-08-05 21:45:13 -07:00
Richard Knoll
ecdbdb33af Fixing the filtering of nested module completions 2016-08-05 17:42:52 -07:00
Paul van Brenk
466d26fc76 Fourslash support 2016-08-05 16:24:55 -07:00
Paul van Brenk
94ea825f95 Api Changes and simple superfixes 2016-08-05 16:20:16 -07:00
gcnew
46f5e5fad1 Surface noErrorTruncation option 2016-08-06 01:23:31 +03:00
Wesley Wigham
269b828538 Fix lssl task (#9967) 2016-08-05 14:16:29 -07:00
Yui
8830d7691e Port PR#9867 to Release-2.0 (#10147)
* Change the shape of the shim layer to support getAutomaticTypeDirectives

* Change the key for looking up automatic type-directives

* Update baselines from change look-up name of type-directives

* Add @currentDirectory into the test

* Update baselines

* Fix linting error

* Address PR: fix spelling mistake

* Instead of return path of the type directive names just return type directive names
2016-08-05 14:00:40 -07:00
Nathan Shively-Sanders
cabd276ddc Fix more lint 2016-08-05 10:28:03 -07:00
Yui
ceab31cf0d Port PR #10016 to Master (#10100)
* Treat namespaceExportDeclaration as declaration

* Update baselines

* wip - add tests

* Add tests

* Show "export namespace" for quick-info
2016-08-05 10:12:01 -07:00
Nathan Shively-Sanders
8f638f7ecd Fix lint 2016-08-05 09:58:30 -07:00
Richard Knoll
0f22079d9e Remove trailing slashes, remove mostly useless IO, fix script element kind for files 2016-08-04 18:17:41 -07:00
Nathan Shively-Sanders
798be6f4f9 Add new test baseline and delete else in binder
The extra `else` caused a ton of test failures!
2016-08-04 15:17:08 -07:00
Vladimir Matveev
0a1ec43de0 addref in all configured projects that contain the file 2016-08-04 14:46:00 -07:00
Andy Hanson
9947ac2ece Don't allow properties inherited from Object to be automatically included in TSX attributes 2016-08-04 14:13:07 -07:00
Nathan Shively-Sanders
3c32478b8f Support other (new) literal types in jsdoc 2016-08-04 13:01:17 -07:00
Richard Knoll
ca288231f7 Fixing shim and normalizing paths 2016-08-04 11:10:00 -07:00
Nathan Shively-Sanders
4c3529680d Merge branch 'master' into jsdoc-string-literal-types 2016-08-04 09:52:15 -07:00
Yui
10b36abc8f [Release-2.0] Fix 9662: Visual Studio 2015 with TS2.0 gives incorrect @types path resolution errors (#9867)
* Change the shape of the shim layer to support getAutomaticTypeDirectives

* Change the key for looking up automatic type-directives

* Update baselines from change look-up name of type-directives

* Add @currentDirectory into the test

* Update baselines

* Fix linting error

* Address PR: fix spelling mistake

* Instead of return path of the type directive names just return type directive names
2016-08-04 07:43:54 -07:00
Andy Hanson
0aaec56b8f Add a helper function getOrUpdateProperty to prevent unprotected access to Maps. 2016-08-04 06:04:41 -07:00
Andy
0a8afc91f6 Merge pull request #10115 from Microsoft/export_specifiers_map
Add a helper function `getOrUpdateProperty` to prevent unprotected access to Maps.
2016-08-04 05:54:34 -07:00
Anders Hejlsberg
14f0aa0ace Merge pull request #10118 from Microsoft/limitTypeGuardAssertions
Limit "type guards as assertions" behavior
2016-08-03 14:59:19 -07:00
Nathan Shively-Sanders
38ee13cc32 Fix newline lint 2016-08-03 14:38:05 -07:00
Nathan Shively-Sanders
045b51a8ef Use {} type facts for unconstrained type params
Previously it was using TypeFacts.All. But the constraint of an
unconstrained type parameter is actually {}.
2016-08-03 14:36:05 -07:00
Vladimir Matveev
c0bcf8f10c release cached tree in compilation settings change 2016-08-03 14:02:37 -07:00
Richard Knoll
293ca60ffd Renamed span to textSpan to better follow other language service APIs 2016-08-03 11:07:57 -07:00
Nathan Shively-Sanders
8c01efba04 Allow JS multiple declarations of ctor properties
When a property is declared in the constructor and on the prototype of
an ES6 class, the property's symbol is discarded in favour of the
method's symbol. That because the usual use for this pattern is to bind
an instance function: `this.m = this.m.bind(this)`. In this case the
type you want really is the method's type.
2016-08-03 10:33:10 -07:00
Anders Hejlsberg
12eb57c4d0 Fix linting error 2016-08-03 10:15:00 -07:00
Anders Hejlsberg
7ab6e11aaf Limit type guards as assertions to incomplete types in loops 2016-08-03 10:00:37 -07:00
Andy Hanson
204f2c16c0 Add a helper function getOrUpdateProperty to prevent unprotected access to Maps. 2016-08-03 09:01:40 -07:00
Andy Hanson
359c8b12ef Don't allow ".d.ts" extension in an import either. 2016-08-03 07:18:48 -07:00
Richard Knoll
8b5a3d9fd7 Refactoring API to remove duplicate spans 2016-08-02 19:03:36 -07:00
Nathan Shively-Sanders
4189b4d718 Narrowing type parameter intersects w/narrowed types
This makes sure that a union type that includes a type parameter is
still usable as the actual type that the type guard narrows to.
2016-08-02 16:10:20 -07:00
Richard Knoll
a5d73bfc24 No more filtering results 2016-08-02 15:55:30 -07:00
Andy Hanson
7908257ab7 Fix lint error 2016-08-02 13:18:46 -07:00
Yui
126c1eeb59 [Release-2.0] fix 9802: fix language service for UMD module alias (#10016)
* Treat namespaceExportDeclaration as declaration

* Update baselines

* wip - add tests

* Add tests

* Show "export namespace" for quick-info
2016-08-02 13:01:05 -07:00
Andy Hanson
6814a9fac6 Rename function 2016-08-02 12:41:22 -07:00
Andy Hanson
dc192238cc Use recursion, and fix error for undefined node 2016-08-02 12:37:30 -07:00
Wesley Wigham
0eeb9cbd0c Fix #10083 - allowSyntheticDefaultImports alters getExternalModuleMember (#10096) 2016-08-02 12:34:23 -07:00
Ron Buckton
c725ee457d Merge branch 'master' into transforms 2016-08-02 11:47:18 -07:00
Ron Buckton
ed0a653515 Merge branch 'master' into transforms 2016-08-02 11:45:56 -07:00
Nathan Shively-Sanders
4a470bd27c Merge pull request #9997 from Microsoft/re-add-strict-concat-signature
Re-add strict concat signature
2016-08-02 11:06:18 -07:00
Andy Hanson
db44a71005 Fix bug 2016-08-02 10:47:06 -07:00
Andy Hanson
91c9d76f09 Remove SupportedExpressionWithTypeArguments type; just check that the expression of each ExpressionWithTypeArguments is an EntityNameExpression. 2016-08-02 10:32:42 -07:00
Andy Hanson
0f134ed69e Improve error message 2016-08-02 06:58:26 -07:00
Andy Hanson
2821d98265 Merge branch 'master' into no_ts_extension 2016-08-02 06:18:53 -07:00
Richard Knoll
35cd480a9c Fixing import completion spans to only include the end of the directory fragment 2016-08-01 17:51:22 -07:00
Zhengbo Li
f06413b8d4 Merge pull request #10035 from zhengbli/9522
Recreate program if baseUrl or paths changed in tsconfig
2016-08-01 17:15:03 -07:00
Vladimir Matveev
de37f35f7c set compilation settings of project as a part of sync process 2016-08-01 17:12:15 -07:00