tree bc52a22ddfc3e1d59808508aa6298e9e485867b9
parent 4ac424839e8b3dc11afaf075e6625062148c68bc
author Max Kim <mminkim89@gmail.com> 1493853173 -0700
committer GitHub <noreply@github.com> 1493853173 -0700

Summary integration sync (#288)

* Sync to origin master

* checkpoint

* Initial ast integration - ranges not behaving properly

* Minor bug fix

* checkpoint

* Tasks tests all passing

* Checkpoint before error code fix

* Tasks tests set back to 100% after introducing error codes

* resolver_test midway checkpoint

* Checkpoint

* Full test coverage in analyzer. Server still left

* All tests passing

* Make paths explicit

* Remove comments

* Attributes now sorted by offset. Improves performance in auto completion

* DOCTYPE now acceptable

* Created separate Ast for top level document container

* Refactored primary function in completion.dart

* Minor code clean up

* Fuzz tester bug fix

* Revert try catch block

* Rename exception codes after changes in angular_ast

* Bug fix on [class. [style. [attr. bindings; range error

* Allow spaces in msutaches

* Autocompletion in text attribute value is now empty

* Allow for plain [class] binding

* Fixed update_deps.sh to work with angular_ast

* Clean up deps and remove some unnecessary comments

* Changed pubspec to pull from master

* Defend against files hidden by generated files (#271)

* Fix travis build. Fix sdk related errors (ContextRoot and IdeOptions). Clean up imports to remove unused

* Travis sdk fix (#272)

* Sync to origin master

* Fix travis build. Fix sdk related errors (ContextRoot and IdeOptions). Clean up imports to remove unused

* First round of quick fixes based on feedback

* Tick to 8 (#277)

* Sync to origin master

* Fix travis build. Fix sdk related errors (ContextRoot and IdeOptions). Clean up imports to remove unused

* Tick to 0.0.8

* remove comment

* Error codes no longer use hard offsets; uses string instead

* Track @Attribute annotated constructor parameters (#270)

* Merged attribute generating logic to be agnostic of Element or template type.

* Assert for indexOf added into test. Moved comments for clarity

* Remove comment-blocked chunk

* Resolve plain attributes -- in ranges, and strchecks for inputs. (#278)

* Resolve plain attributes -- in ranges, and strchecks for inputs.

Record resolved ranges for `x="y"` where `x` is an input or a constructor
`@Attribute`. If its an input, check that strings are assignable to it.
If not, give it its own error that hopefully explains the semi magical
situation.

* Track/typecheck std attrs

Eventually we should
* report errors for <a href="foo" [href]="bar">
* not suggest href after [href] has been used
* not suggest [href] after href has been used

* Changes based on feedback

* Error codes added to hashmap so now show up. Fixed issue with <div template> causing crash

* Changed pubspec to pull from master in angular_ast

* Template parsing fix (#279)

* Sync to origin master

* Fix travis build. Fix sdk related errors (ContextRoot and IdeOptions). Clean up imports to remove unused

* Fix issue that caused empty binding on template attribute to crash

* Now ready: Priority angular analysis (#273)

* Priority dart & html analysis

* Starter class, await supplementing errors or they're added too late.

* Report has work to analyze for priority requests

* Don't await for requesting files, do have a cache busting option

* Handle case of files being requested multiple times

* Priority html requests, requires serving errors with line infos.

* Report all html files for all dart contexts in one method, plus tests

I think before we were getting a last-one-wins effect, where the last
analyzed dart/html pair would cover up all the errors for every other
dart/html pair.

As such, I need to carefully test that this change doesn't introduce
new false errors (from them being covered up before).

But now with this, we can report html errors back for multiple contexts
from a single method when that's requested. Next I just have to use
that method on getErrors when we have multiple relationships tracked
already.

* Guess html/dart relationship when none exist, otherwise use what's known
  using isEmpty rather than == 0

* Get setterType by setter.parameters[0] instead of setter.variable.type (#283)

Seems like in the precense of a getter, setter.variable.type is the
getter type, not the setter's type. So use the first function argument
instead.

* Remove contextRoot, won't be required in master soon, and breaks dev (#284)

* Disable global attr plaintext typechecking until #280 has a clear solution (#286)

* Update test_reflective_loader, fix analyzer warnings&errors (#285)

* Update test_reflective_loader, fix analyzer warnings&errors

* Fix the single server test too, which prevents build errors

* Use var instead of types in angular_driver_test

* Add TODOs

* Percentage use fix in style.width and style.height. Test cases added (#282)

* Percentage use fix in style.width and style.height. Test cases added

* Added more property names that use percentage
