Commit Graph

712 Commits

Author SHA1 Message Date
Ryan Nowak e5cac9fb7f Implement @namespace
This change adds support for @namespace, and introduces a set of
changes that are needed to support @namespace in the parser.

@namespace and @class have always been treated as reserved words by Razor,
with the intent that someday they would be allowed as directives.

This changes makes that possible.

You will still get an error about @namespace being a reserved word if you
don't have the directive.
2017-04-11 12:46:02 -07:00
Ryan Nowak b4b4a19549 Fix #1194 - DirectiveIRNode doesn't have source
Now with line mappings!
2017-04-11 10:45:24 -07:00
Pranav K e2267f54a6 Add support for naming a page (#1204) 2017-04-11 10:10:45 -07:00
Ryan Nowak 207f40f92d Move test infrastructure
This moves the test infrastructure to a common project and udpates the MVC
tests to use the good integration testing features.
2017-04-10 19:42:56 -07:00
Ajay Bhargav Baaskaran 0f7b0f5d8c [Fixes #1196] Remove Content property from HtmlContentIRNode 2017-04-10 12:54:11 -07:00
N. Taylor Mullen 0618bae3bd Rename Microsoft.AspNetCore.Razor.Evolution => Microsoft.AspNetCore.Razor.Language.
- Also updated corresponding test project to go from Evolution => Language.
- Regenerated test files to reflect new file paths.

#1169
2017-04-10 10:20:04 -07:00
Ajay Bhargav Baaskaran fe60c2426c Moved HtmlContentIRNode from renderer to writer 2017-04-07 12:55:24 -07:00
N. Taylor Mullen 96d97f65e9 Allow null parent tag when calling `GetTagHelpersGivenParent`.
- A `null` parent tag in all of our other API represents "any" parent tag, or in this case "root". Prior to this change we'd expect the caller to do their own verification of the parent and then assume all `TagHelperDescriptor`s are valid; this isn't sufficient because only our code base should have that knowledge.

#1188
2017-04-06 17:02:06 -07:00
N. Taylor Mullen af3cf497a6 Update TagHelperMatchingConventions to disallow opt-out prefix.
- Prior to this change the `TagHelper` parsing would strip the opt-out character (`!`) from tag names that got passed to the TagHelper matching services. At design time this proved to be a problem because they have their own understanding of the HTML document and only pass us full tag names (names that include `!`). This changes the matching conventions to immediately return false if a tag name is seen to contain the `TagHelper` opt-out.
- Added two `DefaultTagHelperFactService` tests to verify that tag names with opt-out prefixes are denied `TagHelperDescriptor`s.

#1186
2017-04-06 16:10:35 -07:00
Ajay Bhargav Baaskaran 0228fd2770 Moved ExecuteTagHelpersIRNode from renderer to writer 2017-04-06 11:43:35 -07:00
Ryan Nowak 0cb7ae7fbf Add support for namespace tokens in extensible directives
This change adds support for accepting a namespace name in extensible
directives. This will be needed for the @namespace directive.

Implemented new parsing and codegen for namespaces using nameof().

Also fixed any issue where we were not global::-qualifying object where it
was used in the design time code for tokens.
2017-04-05 15:37:50 -07:00
Ajay Bhargav Baaskaran 6fea6454f0 Moved CreateTagHelperIRNode from renderer to writer 2017-04-04 16:33:28 -07:00
Ajay Bhargav Baaskaran 1a05359d12 Reset writer scope for tag helpers inside template 2017-04-04 15:43:42 -07:00
N. Taylor Mullen dda9cf3259 Do not generate C# line pragmas without a file path.
- Prior to this change default imports would get line pragmas generated for them because thye'd have a source location but no file path (they were a dynamic document).
- Re-generated C# files to reflect new line pragma changes.

#1110
2017-04-04 15:32:25 -07:00
Yves57 c7e2e1880e Make FileSystemRazorProject internal (#1152)
Fixes #1117
2017-04-04 14:09:53 -07:00
N. Taylor Mullen 68554f8106 Updated the ir lowering phase to lazily add namespaces.
- The lazy addition of namespaces gives the main document lowering phase an opportunity to add source location information which we then add after the main lowering.
- Re-generated csharp to capture addition of using statements that were previously overridden by defaults/imports.

#1174
2017-04-04 12:09:34 -07:00
Ryan Nowak dbb682799e Update generated designer files 2017-04-04 09:14:03 -07:00
Ryan Nowak 3ec4e244db Cleanup around ViewImports
Added a default for the imports filename.

Deleted unused test files
2017-04-03 20:23:02 -07:00
Ajay Bhargav Baaskaran 4dbf6f23c3 Moved TagHelperIRNode, InitializeTagHelperStructureIRNode from renderer to writer 2017-04-03 19:57:51 -07:00
Ajay Bhargav Baaskaran 7d8bd29724 Moved DeclareTagHelperFields from renderer to writer 2017-04-03 15:54:35 -07:00
Pranav K ac176f8671 Revert package version changes
Fixes #1098
2017-04-03 15:46:46 -07:00
N. Taylor Mullen cb5c483a1d Add line mappings for using directives.
- We were generating line pragmas for using directives but not line mappings. This resulted in 0 IntelliSense when written within the Razor editor.
- Regenerated test files to reflect new line mappings.

#1162
2017-04-03 15:18:49 -07:00
N. Taylor Mullen 0e15ff3e95 Re-add marker IR tokens to represent CSharp in an expression.
- At design time we weren't generating line mappings when a user would type `@` or `@(`. This results in no C# IntelliSense being provided to the user because the editor hasn't mapped any of Razor to the C# buffer.
- Modified the `DefaultIRLoweringPhase` to allow for marker symbols, these symbols .
- Re-generated test files to account for 0 length line mappings on empty expression nodes.

#1155
2017-04-03 13:05:54 -07:00
N. Taylor Mullen d4e21ae706 Revert "Generate line mappings for empty expressions."
This reverts commit 4c0afbad86.
2017-04-03 13:05:54 -07:00
N. Taylor Mullen 4c0afbad86 Generate line mappings for empty expressions.
- At design time we weren't generating line mappings when a user would type `@` or `@(`. This results in no C# IntelliSense being provided to the user because the editor hasn't mapped any of Razor to the C# buffer.
- Updated the design time renderer and design time writer to account for empty expressions.
- Modified the `DefaultIRLoweringPhase` to set source locations on empty expression nodes.
- Re-generated test files to account for 0 length line mappings on empty expression nodes.

#1155
2017-04-02 22:25:12 -07:00
Ajay Bhargav Baaskaran 660db5b733 Merge branch 'ajbaaska/writer' into dev 2017-03-31 16:30:11 -07:00
Ajay Bhargav Baaskaran da1e4130d2 Moved from Renderer to Writer 2017-03-31 16:25:07 -07:00
Ajay Bhargav Baaskaran a74cda4402 Setting TokenKind for RazorIRToken 2017-03-31 14:52:10 -07:00
Ajay Bhargav Baaskaran bc347d736f [Fixes #964] Removed Content property from CSharpStatementIRNode 2017-03-31 10:52:53 -07:00
Pranav K 209729332c Add GetImportItems to RazorTemplateEngine
Fixes #1109
2017-03-31 07:48:34 -07:00
N. Taylor Mullen dd9eab551d Workaround tooling issue with runtime only TagHelpers.
- Prior to this if all instances of `TagHelper`s in an assembly had editor browsable never we'd log an error saying that no TagHelpers were found for that assembly. Until we can evaluate a better fix for this issue I've removed the logic that logs those errors and its corresponding tests/resources.

#1145
2017-03-29 16:56:05 -07:00
N. Taylor Mullen fdea42624d Fix UrlResolutionTagHelper tag helper inclusion.
- Also fixed test name to assert all defaultly included TagHelpers instead of just the UrlResolutionTagHelper
2017-03-29 16:30:28 -07:00
Ryan Brandenburg 60a87829f8 Fix type name 2017-03-29 16:19:12 -07:00
N. Taylor Mullen 22c7c90b5a Add `TagHelperFactsService`.
- Add API to enable the editor to query information on the state of `TagHelper`s within a Razor document.
- Refactored methods from `TagHelperDescriptorProvider` to be in a `TagHelperDescriptorConventions` class so the language service could use them.
- Added `DefaultTagHelperFactService` tests.

#1120
2017-03-29 15:36:32 -07:00
Ajay Bhargav Baaskaran c1500da2a8 Don't render directive token from imports in design time 2017-03-29 15:08:11 -07:00
Jass Bagga 582ffe2e10 Add HeadTagHelper and BodyTagHelper
Addresses aspnet/Mvc#5728
2017-03-29 12:23:55 -07:00
Ajay Bhargav Baaskaran 0b5113c76e Suppress compilation errors for TModel in imports 2017-03-29 11:42:13 -07:00
Ryan Nowak af7798a9be Fix a type error in the tag helper comparison 2017-03-27 14:04:12 -07:00
Ryan Nowak 8d1cc43f8e Get rid of extra dependencies
This project shouldn't have any dependencies besides Razor.
2017-03-27 14:04:11 -07:00
Ryan Nowak bc9b9876e5 Add a service for initializing tooling
This is a new API for tooling to call to get a RazorTemplateEngine that's
initialized correctly. For now this is hardcoded to use MVC's conventions.

This is also a very temporary design to get us past the next wave of
changes.

We'll eventually want to change this to an ILanguageService, but this will
require some new plumbing in the editor, so let's defer that for another
day.

(cherry picked from commit a73b5f58a8713076433d24668b99705388b6d6b3)
2017-03-27 14:04:10 -07:00
Ajay Bhargav Baaskaran ed8425800a Revert: Don't generate CSharpStatementIRNode for whitespace 2017-03-27 12:45:49 -07:00
Ajay Bhargav Baaskaran 5928d0d54b Don't generate CSharpStatementIRNode for null or whitespace 2017-03-24 17:54:09 -07:00
Ryan Nowak 1683018d71 Add a static 'register' method to MVC's extensions
This will be called by the IDE, and by MVC to register all of the
functionality in Microsoft.AspNet.Mvc.Razor.Extensions.
2017-03-24 15:56:32 -07:00
Ryan Nowak 565dd30957 Make the parser options configurable
The RazorParserOptions were only configurable via an internal interface
and an extension method on the builder. This isn't suitable for VS because
we need to be able to update the configuration while the editor is open,
without creating a new engine.
2017-03-24 15:21:26 -07:00
Jass Bagga fe6517dcdd Add ITagHelperComponent
Addresses https://github.com/aspnet/Mvc/issues/5728
2017-03-24 13:53:17 -07:00
Ryan Brandenburg b4640f8bb8 Use AspNetCore.Mvc.RazorPages 2017-03-24 13:08:07 -07:00
Ryan Brandenburg 9ffc745e76 Add Mvc.Razor.Extensions to VSIX 2017-03-24 11:45:04 -07:00
N. Taylor Mullen 0fa79818e1 Add DisplayName to RequiredAttributeDescriptor.
- When `RequiredAttributeDescriptor`s are displayed in an editor their display name differs based on their name comparison mode. If their name comparison mode happens to be a prefix match then we need to append three dots to indicate that it's a required prefix for an attribute.
- Added a new descriptor builder test to validate `DisplayName` is created correctly.

#1119
2017-03-24 11:07:52 -07:00
Pranav K 2ea0659e60 Change compilation targets.
* Remove net451 as a compilation target
* Upgrade to netcoreapp2.0
2017-03-24 07:49:34 -07:00
Ajay Bhargav Baaskaran 54831fed35 Simplified if condition 2017-03-23 19:17:32 -07:00
Ajay Bhargav Baaskaran ae34e14358 Don't generate line mappings for imports 2017-03-23 10:39:07 -07:00
Ryan Nowak 6278dbeac5 Don't filter by assembly name if null is provided
This will nullref if null is provided for the assembly name filters. We
want to transition tooling to not pass any assembly names.
2017-03-22 17:12:21 -07:00
N. Taylor Mullen c07759996f Fix absolute path handling.
- Normalize paths to be absolute and to also use forward slashes.
- Updated our `EnsureValidPath` method to be `NormalizeAndEnsureValidPath`.
- Added tests to validate new `NormalizeAndEnsureValidPath`.
- Updated existing tests to react to `NormalizeAndEnsureValidPath` correctly.

#1106
2017-03-22 16:35:19 -07:00
Ryan Brandenburg 72febdac64 Move Razor.Host to Razor 2017-03-22 16:10:44 -07:00
Ajay Bhargav Baaskaran cab6eea663 Set file path from RazorSourceDocument in syntax tree 2017-03-22 15:13:38 -07:00
Doug Bunting 6fbbd5d148 Disable API Check in projects with untracked breaking changes 2017-03-22 08:35:10 -07:00
Ajay Bhargav Baaskaran c6a35e7b26 Added HasIndexer property to BoundAttributeDescriptor 2017-03-21 16:18:31 -07:00
Ajay Bhargav Baaskaran 55d6362325 [Fixes #1094] Use custom JsonConverters for serializing/deserializing TagHelperResolutionResult 2017-03-21 12:08:06 -07:00
Ryan Nowak 5f547d8e32 Add intentation support
This is a code dump from the editor
2017-03-20 19:52:29 -07:00
N. Taylor Mullen f302d68589 Remove ViewComponent descriptor resolution from tooling.
#1074
2017-03-20 16:38:20 -07:00
Ajay Bhargav Baaskaran f3744efc5c Use Version 8.0.3 of Json.Net 2017-03-20 16:31:10 -07:00
N. Taylor Mullen d5e003fa4c Fix `RazorLanguageService`.
- Previously our constructor was calling down into the wrong overload.
2017-03-20 16:27:56 -07:00
Ryan Nowak 53ac097ce4 Add TagHelperFactsService 2017-03-20 15:50:34 -07:00
Stefan Nikolei 319c535224 Remove RazorIrNodeVisitorOfT (#1089) 2017-03-20 14:51:51 -07:00
Ajay Bhargav Baaskaran 4a71b1d57d [Fixes #980] Generate parser error for unquoted string token directives 2017-03-20 11:58:55 -07:00
Ryan Nowak ca6f988bd9 Add GetTagHelperSpans
This is a code dump from the editor
2017-03-20 11:18:05 -07:00
Ryan Nowak fdd08ceab2 Adding RazorSyntaxFactsService
This is a code dump from tooling -> Razor

This service will exist to answer questions about syntax trees for the
editor. Right now I'm just moving in the code in the simplest way
possible. Tests + cleanup to follow.
2017-03-20 08:21:28 -07:00
Ryan Nowak 8a6a22c767 Fix one of Taylor's broken comparers
This was a bug that wasn't being caught by tests until I implemented
IEquatable on the TagHelper types.
2017-03-19 12:39:33 -07:00
Ryan Nowak bbd08f0cc9 Add TagHelper directive and match info to CodeDocument 2017-03-19 12:33:09 -07:00
Ryan Nowak feb5f395d2 Make TagHelperDescriptor and friends IEquatable 2017-03-19 11:38:41 -07:00
Ryan Nowak b6aa6b8099 Make AcceptedCharacters non-legacy 2017-03-19 11:30:19 -07:00
Ryan Nowak acbbdf0b2c Rename BlockType -> BlockKind
Also moved BlockKind and SpanKind out of .Legacy
2017-03-19 11:18:40 -07:00
Ryan Nowak 0aee9152bd Make AcceptedCharacters public
Needed for tooling
2017-03-19 11:02:31 -07:00
Ryan Brandenburg a7eb30ddca Remove old razor 2017-03-17 14:58:13 -07:00
N. Taylor Mullen 8f9ff1abd9 Clean up TagHelperDescriptor APIs.
- Removed all design time descriptors and put their API surface into their corresponding descriptor. Part of removing the design time API surface was removing the tracking of `<Remarks>`, it wasn't used so there's on need to track it until we need it.
- Removed the Type requirement from `TagHelperDescriptor`. With this separation we'll be able to have abstract `TagHelper`s that aren't based on a class implementation.
- Removed Prefix from the `TagHelperDescriptor` API surface. It was a legacy requirement based on how the Razor parser was put together. We can work around this now.
- Stripped correlation information from the immediate `TagHelperDescriptor` API surface. Instead this information is now tracked in `TagMatchingRule`s. This change means that you will not have multiple `TagHelperDescriptor`s per `TagHelper`; instead it's all tracked in a single descriptor. A side effect of this change was the transformation of `IsIndexer` => 3 new properties.
- Renamed many descriptor types and property names.
- Added builder APIs to construct TagHelpers since they're inherently immutable in their API surface.
- Added `ITagHelperDescriptorBuilder` to represent `TagHelper`s that are built from an `ITagHelper` implementing class. It re-introduces the `TypeName` association of a `TagHelper`.
- Added `ITagHelperBoundAttributeDescriptorBuilder` to represent that an attribute was associated with a property.
- Added validation methods to the descriptor builders to enable consumers to validate the current state of the builder and add diagnostics as necessary.
- Moved descriptors away from RazorError.
- Updated the various comparers to understand the descriptors new API.
- Added a new `RazorDiagnosticFactory` abstraction to handle `RazorDiagnostic`s and their corresponding errors/ids etc. This new API should allow for easy addition of new `RazorDiagnostic` errors.
- Updated the `DefaultTagHelperDescriptorFactory` to construct `TagHelperDescriptor`s using the new builder APIs and in the new descriptor format (1 descriptor per type).
- Updated `ViewComponentTagHelperDescriptorFactory` to construct `TagHelperDescriptor`s with the builder API.
- With both factory implementations code was duplicated because the ViewComponent work will be moving outside of Razor once we have the proper hooks.
- Updated `TagHelper` binding bits to capture a binding result in order to query which rules appy to a given tag name.
Addressed feedback
- Update tests to react to new `TagHelperDescriptor` API.
- Remove case sensitive comparers and some cleanup
- Added TagHelperDescriptorJsonConverter, RazorDiagnosticJsonConverter and added serialization tests
2017-03-17 12:18:05 -07:00
Ryan Nowak 90b48347a5 Port the legacy RazorEditorParser 2017-03-16 12:47:29 -07:00
Nate McMaster 43a41398ac Unify dependency versions to one file 2017-03-15 16:44:00 -07:00
Ajay Bhargav Baaskaran 310ccc31d0 Include default imports when ImportsFileName is null 2017-03-14 19:33:18 -07:00
Pranav K 2fc88fe9c1 Add support for base path in FindHiearchicalItems
Required for https://github.com/aspnet/Mvc/issues/5915
2017-03-13 11:15:11 -07:00
Pranav K 7d43bfc709 Add RazorSourceDocument.Create(string template)
Add document and fix casing of RazorSourceDocument.FileName
Fixes #1063
2017-03-13 09:44:06 -07:00
Ryan Nowak 1330b7792d Add editor references to LanguageServices 2017-03-09 15:25:54 -08:00
Ryan Nowak bf2a6140f0 Add back a constructor
We still need this for now. Both constructors call the non-obsolete
constructor on the base class.

Will remove this once ServiceHub starts calling the new constructor.
2017-03-09 15:25:54 -08:00
Jass Bagga a418a175a9 Add TagName to TagHelperContext
Addresses #1065
2017-03-09 14:59:11 -08:00
Pranav K a034b2ed04 Collate diagnositcs from Imports 2017-03-08 18:29:17 -08:00
Ryan Nowak 871f9e43ca Update versions of VS and Roslyn 2.0.0 dependencies
VS has gone RTM so, updating to the RTM versions of those dependencies.

Roslyn does not publish our shim packages on NuGet.org, so updating those
to a non-ancient version for projects that use 2.0.0. The projects that
use 1.3.x are staying put for now.

The code change is dealing with something that was obsoleted.
2017-03-08 08:57:49 -08:00
Yves57 dee8d8694f Prevent LOH allocations when constructing large Razor Source Documents. (#1049)
* Prevent LOH allocations when constructing large Razor Source Documents.

* Feedback
2017-03-06 16:50:05 -08:00
Ryan Nowak 3159266169 Whitespace cleanup 2017-03-06 16:29:59 -08:00
Ryan Nowak cefca39510 Fix broken padding in design time
The padding calculation for C# expression wasn't taking into account the
` = ` so all of the padding values for expressions were off by 3.
2017-03-06 15:54:47 -08:00
Ryan Nowak 966cd4a68d Introducing BasicWriter and TagHelperWriter
These are the replacements for CSharpRenderingConventions
2017-03-06 13:12:57 -08:00
Ryan Nowak 7730d33482 Introducing DocumentWriter 2017-03-03 15:00:09 -08:00
Ajay Bhargav Baaskaran d422e61c3e Make CSharpRenderingContext and friends public 2017-02-28 19:04:51 -08:00
Pranav K 27e66c3750 Add tests for RazorPageGenerator 2017-02-28 14:15:52 -08:00
Pranav K 12a502d775 Move FileSystemRazorProject into Razor.Evolution
Add tests
2017-02-28 14:15:52 -08:00
Pranav K c83741f11c Remove references to Razor from RazorPageGenerator 2017-02-28 14:15:52 -08:00
Pranav K 3772c7c343 Downgrade versions of new packages to 1.0.0 2017-02-27 15:45:17 -08:00
Ryan Nowak 913d9ef465 Quick fix for attribute documentation 2017-02-23 16:03:54 -08:00
Ryan Nowak 550283957a Tolerate null returns from OOP methods
See #1023
2017-02-23 15:51:26 -08:00
Ryan Nowak f177648c88 Add activity log for TagHelper exceptions
This will log to the VS activity log any time we fail to discovery
taghelpers due to an exception. There's no real user experience around
this... if someone is having an issue we can ask them to send us the log
or post the relevant portion.
2017-02-23 15:43:17 -08:00
Ryan Nowak 615d8e71d6 ifdef all the Razor Info window code
We don't want to ship this in VS yet :) Now the Razor Info window will
only be available in debug builds.
2017-02-23 11:03:25 -08:00
Ryan Nowak 94d21e03f5 Fixing support for XML docs in OOP
The issue here is that the OOP host doesn't yet have support for
documentation, it will just return null. Fixing this code to look for the
documentation after we get the descriptors back into VS.

I tested this and confirmed that it works with TagHelpers in dlls + xml
file documenation as well as TagHelpers compiled in the project itself.
2017-02-23 09:13:12 -08:00