Commit Graph

66 Commits

Author SHA1 Message Date
Ajay Bhargav Baaskaran 73ca91f603 Handle multiple nested sections correctly (dotnet/aspnetcore-tooling#196)
\n\nCommit migrated from 26e8d86b21
2019-02-07 14:04:57 -08:00
Ajay Bhargav Baaskaran 57c10c0321 Fixed null-ref with reserved word inside a code block (dotnet/aspnetcore-tooling#192)
\n\nCommit migrated from 10dbc434ee
2019-02-07 14:03:23 -08:00
Ajay Bhargav Baaskaran b15af76917 Fix crash with code blocks in tag helper attributes (dotnet/aspnetcore-tooling#190)
* Fix crash with code blocks in tag helper attributes

* Better fix

* Fixed another case
\n\nCommit migrated from 9e97ba9b97
2019-02-07 14:02:10 -08:00
N. Taylor Mullen 83c8c0cba2 Don't associate Roslyn workspace project with ProjectSnapshot.
- Removed the differences of workspace project and `HostProject` in regards to `ProjectSnapshotManager` methods. We now just have `ProjectAdded`, `ProjectRemoved` etc.
- Obsoleted Workspace related members from the `ProjectSnapshot`in order to ensure that current LiveShare continues to work. Once LiveShare has been incorporated into Razor we can remove these members from the project snapshot.
- Removed several TagHelper calculating logic pieces from the document tracker. This is now done entirely from the ProjectSnapshotManager so there's no secondary route that needs to be taken in order to resolve TagHelpers for VS windows cases.
- Updated the `ProjectState` to take in TagHelpers and removed the internal logic it had to resolve TagHelpers.
- Added a TagHelpers property to ProjectSnapshot to indicate that they're no longer calculated, they're part of the project inputs.
- Added a ProjectWorkspaceChange generator to be responsible for calculating any workspace related information that is needed for a `ProjectSnapshot`. For now, this just calculates TagHelpers but in the future it may do more.
- Added a `FilePathComparison` static helper class which acts similarly to `FilePathComparer`.
- Changed our dynamic file info provider to no longer care about `ProjectIds`. Before this, it kept track of the project ids internally but never used them so this is a noop functional change.
- Changed how the out of process remote TagHelper resolution flow works. Prior to this you'd pass a Project across the wire as part of a project snapshot handle and then resolve TagHelpers the old fashioned way.
- Updated all existing tests to respect the new `ProjectWorkspaceState` flows.
- Added tests for new APIs.

dotnet/aspnetcore-tooling#6672
\n\nCommit migrated from a5621641f8
2019-02-01 11:06:20 -08:00
N. Taylor Mullen 12a6864710 Prioritize local dotnet when running SDK Razor tests.
- The SDK tests were occasionally failing with access denied due to the test using the machines dotnet.exe (instead of the local projects dotnet.exe).

dotnet/aspnetcore-tooling#1667
\n\nCommit migrated from 1a96714921
2019-02-01 11:06:19 -08:00
Ajay Bhargav Baaskaran 57211a33db Fix: Exception for empty data- attributes in tag helpers (dotnet/aspnetcore-tooling#173)
\n\nCommit migrated from 6d71b6a265
2019-01-30 09:12:37 -08:00
Ajay Bhargav Baaskaran cdaad2964d Fix tag grouping for tags with no name
\n\nCommit migrated from f5c1068d88
2019-01-22 15:32:22 -08:00
Ajay Bhargav Baaskaran 6c6e048dcc Fix missing transition in using keyword
\n\nCommit migrated from 02781b17cd
2019-01-22 15:32:22 -08:00
Ajay Bhargav Baaskaran e6b8c86a48 Better structure for Tag helper start/end tags (dotnet/aspnetcore-tooling#132)
\n\nCommit migrated from f6ab4cc1d1
2019-01-17 13:38:17 -08:00
Ryan Nowak 40633dde21 Add attribute only bindings and fix dotnet/aspnetcore-tooling#6373
Adds a new API for WTE to call given a TagHelperBinding to determine if
the binding should colorize/classify only the attributes of the HTML
element in source code. This is driven by a new metadata item that the
Components 'directive attributes' all set. There's no way for a user to
access this feature via tag helpers currently, but it could be added
easily in the future.

Also fixing dotnet/aspnetcore-tooling#6376 while I'm in there. 👍
\n\nCommit migrated from df449beea9
2019-01-14 15:25:49 -08:00
Pranav K 148bc99cce Use a property to allow specifying component globbing pattern
Workaround for https://github.com/aspnet/AspNetCore/issues/6500
\n\nCommit migrated from cee0223732
2019-01-14 14:53:24 -08:00
Ajay Bhargav Baaskaran 56695d17c9 Set ParserContext.StartOfLine to true when parsing starts (dotnet/aspnetcore-tooling#116)
* Set ParserContext.StartOfLine to true when parsing starts

* Missed baselines
\n\nCommit migrated from a80c3a981a
2019-01-14 14:17:22 -08:00
Ajay Bhargav Baaskaran d5e9a153c7 Correctly handle whitespace that precedes a Razor directive (dotnet/aspnetcore-tooling#117)
\n\nCommit migrated from 15556c8ff3
2019-01-14 11:59:37 -08:00
Ryan Nowak 9541938327 Fix A VS issue
The issue here is that the downlevel SDK (2.1/2.2) don't define the
component-related targets needed for the component design time build.
Depending on the ordering of targets, this can break all features in VS
that depend on the design-time build.

Since we want this to noop in those cases, the best fix is to make our
targets depend on a target property that will be empty in the downlevel
SDKS, but will contain our targets in the 3.0 SDK.

(cherry picked from commit dotnet/aspnetcore-tooling@b88b32c73a)
\n\nCommit migrated from 1c4b19ae88
2019-01-14 08:55:39 -08:00
Ajay Bhargav Baaskaran b0e2dc2add Added check to ensure we generate syntax tree with full fidelity (dotnet/aspnetcore-tooling#111)
* Added check to ensure we generate syntax tree with full fidelity

* Better check

* Feedback
\n\nCommit migrated from 88653fc348
2019-01-10 13:55:28 -08:00
Ajay Bhargav Baaskaran b449a44440 Fix void tags grouping logic (dotnet/aspnetcore-tooling#110)
* Fix void tags grouping logic

* Handle bang in tag name
\n\nCommit migrated from 2c41ae9550
2019-01-09 11:41:10 -08:00
Ajay Bhargav Baaskaran 14afcc3eaf Reenable skipped test (dotnet/aspnetcore-tooling#99)
\n\nCommit migrated from 2ad0641b1e
2019-01-09 11:39:02 -08:00
Ajay Bhargav Baaskaran e1245d874f Fix: Missing void end tag when targeted by TH with WithoutEndTag structure (dotnet/aspnetcore-tooling#105)
\n\nCommit migrated from 33bf2691d5
2019-01-08 16:11:18 -08:00
Ryan Nowak 5b5aa6837f Properly handle attr-value prefix in markup pass
Fixes aspnet/AspNetCoredotnet/aspnetcore-tooling#6480

We were missing handling for the attribute value prefix of a markup
attribute during the markup block rewrite pass. This is properly handled
inside the runtime code writer so you wouldn't see this bug if the
contents of the element were dynamic (and thus could not be rewritten).

Most of the churn here is due to renaming classes. We generally prefer
the term *markup* over *html* in code artifacts, and this was one piece
of new code that refers to html.
\n\nCommit migrated from d16eafd667
2019-01-08 10:10:29 -08:00
Ajay Bhargav Baaskaran 77bd9d343c Fixed exception with non taghelper start/end void tags
\n\nCommit migrated from ee8fdae756
2019-01-07 21:02:10 -08:00
Ajay Bhargav Baaskaran f87d9b5335 Fix null ref in the parser (dotnet/aspnetcore-tooling#103)
\n\nCommit migrated from 8e1629b60b
2019-01-07 20:18:39 -08:00
Ryan Nowak 32a8a7485e Remove workarounds for missing 3.0 support
Leading up the release of VS 16.0p1 we added workarounds to the SDK to
make Razor fall back to the 2.1 configuration for design-time. Since
we're adding the 3.0 language support to preview2 we can remove these
workarounds. These features have been available in internal builds for
some time.
\n\nCommit migrated from e6be8a7a3e
2019-01-07 16:53:55 -08:00
Ryan Nowak d46aa2e2bd Enabling features for Components in VS
This is the final set of enabling features for VS.. including:
- Adding component types to IDE project engine
- Using file kind in the editor
- Enabling component documents in the project system
- Fixing some bugs in the xaml/msbuild authoring
- Adding a missing capability for component projects

The only thing here that probably bears explaining is the class name
mangling. This is a carry over from Blazor, basically because the
generated code is part of the workspace, we have to mangle the class
name to avoid collisions. The work to resolve this is tracked
separately, and will require coordination from a few teams to resolve.
\n\nCommit migrated from d0a8aa3f97
2019-01-07 16:28:48 -08:00
Ryan Nowak 9c10b29f87 Merge pull request dotnet/aspnetcore-tooling#101 from aspnet/nimullen/merge16.0tomaster
Merging changes into master\n\nCommit migrated from 1041e8be71
2019-01-07 16:28:36 -08:00
N. Taylor Mullen 6552d950e0 Merge branch 'release/vs16.0'
\n\nCommit migrated from c331867311
2019-01-07 15:45:17 -08:00
Pranav K 4e909515a7 PR changes
\n\nCommit migrated from ef1a7507c9
2019-01-07 15:43:28 -08:00
Pranav K 500bdc1fd4 Exclude RazorComponent items from RazorGenerate item group
Interim solution to allow components to share the .cshtml extension. When declared in
the project file, the SDK will prevent RazorComponent items from being included
in the RazorGenerate itemgroup.
\n\nCommit migrated from 92e2c70b69
2019-01-07 15:17:41 -08:00
Ryan Nowak b10374a368 SDK updates for components tooling
This is a bug fix for the RazorComponentWithTargetPath xaml rule. We
need to have separate targets for components and views.

The other fix here is a change to the set of workarounds we're using for
components currently. We need this project capability for the correct
project host to be used when loading the project.

(cherry picked from commit dotnet/aspnetcore-tooling@78163f7e4f)
\n\nCommit migrated from f8835ce7a8
2019-01-04 13:12:47 -08:00
Ryan Nowak e6e8fba39c SDK updates for components tooling
This is a bug fix for the RazorComponentWithTargetPath xaml rule. We
need to have separate targets for components and views.

The other fix here is a change to the set of workarounds we're using for
components currently. We need this project capability for the correct
project host to be used when loading the project.
\n\nCommit migrated from 78163f7e4f
2019-01-04 13:08:05 -08:00
Pranav K 49dfd7dacc Add a test using 2.2 project with current Sdk (dotnet/aspnetcore-tooling#91)
* Add a test using 2.2 project with current Sdk

Fixes https://github.com/aspnet/AspNetCore/issues/5101

* Do not reference Microsoft.AspNetCore.App in test apps
\n\nCommit migrated from 9b4fd448d4
2019-01-04 10:36:41 -08:00
Ajay Bhargav Baaskaran 07a62871d0 Make whitespace in extensible directives be SpanKind.None (dotnet/aspnetcore-tooling#90)
\n\nCommit migrated from 9035677e46
2019-01-03 15:58:48 -08:00
Ryan Nowak 19bc651858 Add design-time MSBuild support for components
\n\nCommit migrated from f6f6e16467
2019-01-03 08:50:15 -08:00
Ryan Nowak 14abd88648 Clean up usage of FileKinds
\n\nCommit migrated from b45125a755
2019-01-03 08:50:15 -08:00
Ajay Bhargav Baaskaran 053121e0b7 Refined Start tag and End tag structure (dotnet/aspnetcore-tooling#62)
Regenerated baselines\n\nCommit migrated from d54460296f
2019-01-02 15:32:55 -08:00
Ryan Nowak 583113686c Test cleanup for component tests
This code all got dumped here during the port. This change deletes tests
that have already **moved** to the aspnet/AspNetCore repo.

Also fixed the markup rewriter tests for components.
\n\nCommit migrated from 86cc904004
2019-01-01 22:30:04 -08:00
Ryan Nowak 74d56ce024 Ignore markup comments in components
Fixes: aspnet/AspNetCoredotnet/aspnetcore-tooling#6184

This gives us parity with the current behavior. Since comments aren't
meaningful in a component/render-tree context, we ignore everything
inside of them for codegen/lowering.
\n\nCommit migrated from 7250dd2624
2019-01-01 20:06:32 -08:00
Ryan Nowak f741241171 Fix lowering of data- with HTML for components
This was missed in the previous attempt to fix data- attributes. HTML
wasn't being translated into the correct IR.
\n\nCommit migrated from 239a88d973
2019-01-01 19:40:06 -08:00
Ryan Nowak 724178680f Provide a public entry point for Roslyn features
We need to be able to wire up these features from outside of the Razor
repo. For layering reasons this can't be done in the main Razor
assembly, so it can't be done by default.
\n\nCommit migrated from 386e2b3797
2019-01-01 17:51:48 -08:00
Ryan Nowak f973693438 Fix aspnet/AspNetCoredotnet/aspnetcore-tooling#6186
The issue here is that the compiler generates a different syntax tree
for `data-` attributes :(. I've added a note to dotnet/aspnetcore-tooling#6112 to follow up on
the compiler behavior. We used to parse data- attributes differently for
components, but I really don't think having the compiler special case
them makes sense.

For now I've added a workaround here to lower `data-` attributes in a
fashion similar to other dynamic attribute values.
\n\nCommit migrated from f5109fbfec
2018-12-31 16:14:04 -08:00
Ryan Nowak 7f3a187455 Fix aspnet/AspNetCoredotnet/aspnetcore-tooling#6187
The bug here is that we have extra whitespace being written out when the
component renders. This happens because parser adds an empty C#
statement node to wrap all of the whitespace that precedes `@functions`.
This is tracked by aspnet/AspNetCoredotnet/aspnetcore-tooling#6207.

To fix this issue I'm allowing the whitespace pass to skip over an empty
C# statement to remove whitespace. This is sound because an empty C#
statement produces no output - we allow removing whitespace before and
after all nodes that produce no output.
\n\nCommit migrated from e68d93f458
2018-12-31 14:43:16 -08:00
Ryan Nowak 14a8159919 Enable component class libraries in SDK
This change contains the enabling features to use Razor Components in a
class library. Currently we require a few workarounds, see the test
project file. This is good enough to get things unblocked.

One part that was needed was to register the correct component features
in the rzc. This is a good example, of why we don't like to add new
features that get registered conditionally, it's error-prone :)

The other part that was needed was to make some of the MVC-related
features for assembly attributes conditional on the TFM. We need to be
able to use the 3.0 (all inclusive) SDK, but without the MVC-related
features. This isn't the right heuristic, but it gets us unblocked.
\n\nCommit migrated from 8dbf02076b
2018-12-28 14:27:33 -08:00
Ryan Nowak 0c1c05efc6 Implement Components with new HTML parser
This change ports the existing Blazor component compiler features to
work on top of the Razor compiler. These new features are on once Razor
Language version is set to V3 or higher.

The tests and code for the old Blazor compiler were added to this repo
in previous changes. This change adds the necessary enabling features,
and gets the tests working.

Code generation for tests tests is identical with a few exceptions.
Design time directives now include line mappings (as they should). The
infrastructure seems to prefer windows style line-endings whereas the
Blazor code did the opposite. I plan to leave this alone unless it's a
problem for testing on *nix.

IR Generation will be cosmetically different due to different node names
and formatting. Structure should generally be the same.

----

In order to implement this support, I had to add the following core
features.

Configuring passes/engine-features based on the langauge version. This
required revisiting a *lot* of old tests and forcing them to use a
version appropriate Razor engine. A lot of our tests for legacy things
were using new versions of the language :(.

Configuring passes/engine-features to switch on/off depending on the
document kind.

Configuring directives depending on the file-kind. Directives are a
parser feature, so this decision needs to be made before the IR phase.
Directives that are specific to a file kind will override directives
that are not - this allows components to customize templates for
instance.

Adding functions/inherits/implements directive as mainline features that
are always on in V3. I'm not quite motivated to do this yet for
typeparam, but we might end up there. Remember that directives are
reserved words in Razor.
\n\nCommit migrated from a04addb86f
2018-12-23 23:37:54 -08:00
Ryan Nowak 45ad1c0ae8 Formalize Component node types
This change cleans up the intermediate node types that we have so far
for components and changes the naming, visibility, etc to match our
existing nodes.

The next change will integrate these types with the IR lowering process.
\n\nCommit migrated from 34cf523c0d
2018-12-21 11:07:12 -08:00
Ryan Nowak 51d19d1745 Code dump of Blazor compiler BindTagHelperDescriptorProvider
This change adds all of the code from the Blazor/Components compiler into
the Razor language assembly. Minimal refactoring or integration work has
been done, that is next :)

All of the code compiles and all unit tests pass, except the one I had
to skip until integration work is done.
\n\nCommit migrated from aa5c82ca5e
2018-12-20 16:04:24 -08:00
Ryan Nowak c37dada0dc Flow FileKind from project items -> code document
This is a bit of a rework of how we initially set this up, but with more
forethought to how this will work in the project system. I have not yet
surfaced this through VS.

My immediate next step is to light up the component integration tests
and something like this is on the critical path to get that work since
we need a way to specify in tests that a document should be treated as
a component.
\n\nCommit migrated from 6b81da3f02
2018-12-18 22:34:14 -08:00
Ryan Nowak ceb1189b2e Stop generating page/view attribute in 3.0
\n\nCommit migrated from 4eb93869b9
2018-12-18 11:55:16 -08:00
Ryan Nowak 2c2ff1f592 Code dump of component tests
This is a dump of the existing component codegen tests from
the Blazor effort.

I'm also adding the minimal Component types as a new shim to get things
to compile. This is similar to how our shims work already for MVC.

The next step will be add port functionality until the tests pass.
\n\nCommit migrated from 49f49dd9f0
2018-12-17 18:21:18 -08:00
Ajay Bhargav Baaskaran 9fc340553f Minor text tag fix
\n\nCommit migrated from 5787d1e7d4
2018-12-14 16:34:03 -08:00
N. Taylor Mullen e8a584729f Fix racey directive token auto-complete.
- This happens because a completion session starts when we've rendered a marker directive token without a line pragma and then we return our parse results which provide a C# buffer with a line pragma. This pull request fixes that.
- Updated tests and verified in VS d16.0stg.

aspnet/AspNetCoredotnet/aspnetcore-tooling#4810
\n\nCommit migrated from ca593c80f7
2018-12-14 11:57:17 -08:00
Ajay Bhargav Baaskaran 9105653629 Completely moved tag grouping logic to the parser (dotnet/aspnetcore-tooling#28)
* Completely moved tag grouping logic to the parser
- Removed MarkupElementRewriter
- Removed legacy Html parser
\n\nCommit migrated from c98b2fe1be
2018-12-11 18:24:39 -08:00