Commit Graph

834 Commits

Author SHA1 Message Date
Ryan Nowak 94aaa3db9e Configure xunit for better display 2017-05-17 20:31:37 -07:00
Ryan Nowak 811ea019a5 Fixes #1245 - Make TemplateCodeExtension public
This removes the hardcoding of an MVC type from Razor.
2017-05-17 20:25:06 -07:00
N. Taylor Mullen 657c2a8da3 Merge branch 'rel/15.3' into dev
# Conflicts:
#	test/Microsoft.AspNetCore.Mvc.Razor.Extensions.Test/IntegrationTests/CodeGenerationIntegrationTest.cs
2017-05-17 11:24:32 -07:00
Ajay Bhargav Baaskaran 7bd13061b5 Set the chunk generator of non-string tag helper attributes to ExpressionChunkGenerator 2017-05-17 11:17:01 -07:00
N. Taylor Mullen b8ea008151 Make extensible directive type token rendering allow value types.
- Instead of rendering a null assigning statement for a type token we now render a `default(TTypeToken)`. With this approach type tokens can be value types without creating a design time error.
- Re-generated baseline files to reflect new directive token code generation.

#1176
2017-05-17 10:31:16 -07:00
N. Taylor Mullen 19f895b9ad Validate line mappings for integration tests in Razor.Extensions.
- Split line mapping validation into its own method.
- Prior to this we were calling the wrong method in our design time code generation integration tests within the Razor.Extensions test project.
- Re-generated line mapping baselines to conform with the cshtml files for Razor.extensions code generation integration tests.

#1351
2017-05-17 10:20:36 -07:00
Ryan Brandenburg b96a486650 Compile CodeGeneration tests 2017-05-16 16:26:47 -07:00
Ryan Nowak ad294fb4ba Add a new THProvider api
This change adds an API for Tag Helper discovery.

I also got rid of the 'design time' flag for the provider as an
experimental change. We need to think through the consequences of this
before committing to it. Right now I've left those tests failing until we
can make a decision.

This change decouples VCTH discovery a bit more, but we're still not ready
to move that into a the MVC extensions assembly. For that we need the
ability to discover the MVC extensibility.
2017-05-16 14:59:37 -07:00
N. Taylor Mullen 9fe7c77d30 Move TagHelperBinding out of Legacy.
- Added additional properties to the class to make it more production ready.

#1092
2017-05-16 11:06:07 -07:00
N. Taylor Mullen 8616cf5dd0 Reduce catch all element completion usage.
- This makes it so if you have catch all `TagHelperDescriptor`s their completions don't apply to every existing completion. Instead, they now only apply to already TagHelperified completions and existing completions that are prefixed with a non-empty TagHelperPrefix.
- Updated existing test to have new expectations.
- Added new test to validate non-empty tag helper prefix case.

#1230
2017-05-16 11:06:05 -07:00
Nate McMaster 5856517be7 Remove workaround from test csproj files 2017-05-15 12:52:58 -07:00
Ryan Nowak 2167e4151e Fix #1311 add a base class for features 2017-05-12 21:15:59 -07:00
Ryan Nowak fd3a34b000 Remove RazorIRBuilder.Document 2017-05-12 18:12:30 -07:00
Ryan Nowak 2ec2b98f83 Fix #1312 - make ExecuteCore protected 2017-05-12 17:54:09 -07:00
N. Taylor Mullen 3830a1b7ac Rename the BoundAttributeDescriptor builder.
- ITagHelperBoundAttributeDescriptor => TagHelperBoundAttributeDescriptorBuilder

#1306
2017-05-12 17:39:45 -07:00
Ryan Nowak a8dd0355d0 Remove default usings
This change removes the default usings for 'System' and
'System.Threading.Tasks' and adds them to the MVC template engine.

This is preparation for removing this feature from the razor options, I
wanted to get all of the intentional diff out of the way.
2017-05-12 17:08:58 -07:00
Ajay Bhargav Baaskaran 8cf7d248e7 [Issue #1318] Renamed RuntimeTarget to CodeTarget 2017-05-12 16:32:55 -07:00
Ajay Bhargav Baaskaran 7e447c33ea [Issue #1317] Rename HasAnyErrors to HasErrors in tag helper descriptor api 2017-05-12 16:32:50 -07:00
Ryan Nowak 86d045c667 Fix #1305 move instrumentation to MVC 2017-05-12 16:14:17 -07:00
Nate McMaster 682d630fa2 Upgrade test framework versions and fix issues with tests 2017-05-12 15:41:49 -07:00
Ryan Nowak b9dabd24be Fix #1309 make CSharpDocument abstract 2017-05-12 14:23:30 -07:00
Ryan Nowak b17e506ce8 Some API cleanup around directivest 2017-05-12 13:27:28 -07:00
Ryan Nowak ab98c5d837 Fix #1322 #1328 #1310 #1325
This are mechanical API Cleanup issues.
2017-05-12 13:11:16 -07:00
Ajay Bhargav Baaskaran b44d59ca36 Remove Redirect writers 2017-05-11 15:38:54 -07:00
Ryan Nowak d3e37f20ce Add some new IR nodes
This adds the basics of a few new node types. I'll do a follow up to start
using these so we can eliminate some misuse of the statement node.
2017-05-11 14:52:31 -07:00
Ryan Nowak 2afe2e1627 Rename RazorMethodDeclaration -> MethodDeclaration 2017-05-11 10:22:45 -07:00
Ryan Nowak 3969c23316 Adds a tracking system for Razor documents
This is a MEF service that can actively or passively track open ITextViews
and give us information about the Razor initialization state and eventing
when it changes.

The purpose of this is to act as a bridge between the VS mef world and the
roslyn world.

For now this doesn't do any passive tracking of Razor documents, it's only
on demand. That means it will only be initialized and used right now when
you are using the Razor developer tools. This is just to reduce our risk,
it's not ideal to ship code in VS that's doing something without anyone
looking at the result.
2017-05-11 08:24:37 -07:00
Ajay Bhargav Baaskaran 4bc1a76e22 Moved TagHelperBinder from pass to a phase 2017-05-10 17:16:27 -07:00
Ryan Nowak eb3c47b6ca Add annotations
Fixes #990. This should make a lot of IR manipulations very simple.
2017-05-10 16:38:11 -07:00
N. Taylor Mullen 51fb1b787a Add TagHelperFactsServiceTest to validate root with parent expecting descriptor.
#1253
2017-05-10 16:33:19 -07:00
BrennanConroy a562480cd0 Update test project to netcoreapp2.0 (#1292) 2017-05-09 14:22:35 -07:00
N. Taylor Mullen 774aebaa01 Rename TagHelperDescriptorProvider => TagHelperBinder.
- Moved the type out of the Legacy namespace.
- Renamed the types method to `GetBinding` since `TagHelper` is now inferred.
- Updated test names to reflect new method/class name.
- Updated product code variables to reflect new naming (provider => binder).

#1289
2017-05-08 16:59:53 -07:00
Ryan Nowak a570139b08 Fix #1059 and #1060 2017-05-08 12:30:19 -07:00
Ryan Nowak 1705888721 Add a test for #153 - already fixed 2017-05-05 12:48:01 -07:00
N. Taylor Mullen 1795fc26c1 Add AttributeCompletion API.
- Added a `GetAttributeCompletions` API that's consistent with current Razor's editor expectations.
- Added unit tests to validate all code paths of the new `GetAttributeCompletions` method.

#1120
2017-05-05 11:57:31 -07:00
Ajay Bhargav Baaskaran c71f6e7c3f [Fixes #1058] Added a test to verify nested enum behavior 2017-05-05 11:50:31 -07:00
Ryan Nowak e15d1be616 Introduce SourceChange in place of TextChange
This is the first step on the journey to replacing RazorEditorParser. We
can't just get rid of this because VS is using it today.
2017-05-03 17:53:08 -07:00
N. Taylor Mullen 0e509b4bbb Add incomplete directive integration tests.
- These tests validate that our extensible directives do not have code that explodes when an incomplete directive is encountered. This is typically the case when a user is in the midst of typing a directive at design time.
- Added an extensions test and a language test.

#1271
2017-05-01 14:32:17 -07:00
Ryan Brandenburg 8af9f656dd Add CodeGen tests for @inherits 2017-05-01 10:42:00 -07:00
Ryan Brandenburg dc66eabbff Fail if baseline longer than generated 2017-05-01 10:23:19 -07:00
N. Taylor Mullen f0d0c3d0b8 Merge branch 'preview-1/stabilization' into dev
# Conflicts:
#	build/dependencies.props
2017-04-28 17:20:20 -07:00
N. Taylor Mullen 86beea4269 Fix @namespace directive to handle incomplete directives.
- This involved not using the `First()` method when reading the directives tokens.
- Added two tests to validate an empty directive token and a missed directive token for the `@namespace` directive.

#1268
2017-04-28 17:14:34 -07:00
N. Taylor Mullen 207e0f0b59 Change `GetImports` to allow querying of information on non-existent files.
- Added tests to validate imports can still be found on non-existent files.

#1267
2017-04-28 17:00:24 -07:00
Pranav K c176bdbab0 Use Bundled NETStandard.Library \ NETCoreApp versions instead of explicitly specifying one 2017-04-28 16:00:48 -07:00
N. Taylor Mullen 49e3533bc3 Add test to validate unbalanced triple dash comment inside razor block.
#302
2017-04-27 12:03:59 -07:00
N. Taylor Mullen 344862fbc3 Change string token parsing to not flow errored tokens.
- Found that our extensible directive string parsing system wasn't consistent with the rest of the extensible directive tokens. Basically, if there were malformed string tokens we'd consume them and pass them along to extensible directive passes. This was a big no-no because it means extensible directive passes weren't able to rely on tokens being passed to them being well-formed.
- Fixed up existing extensible directive tests that relied on output of string tokens.

#1247
2017-04-26 16:38:58 -07:00
Pranav K 8270a002b3 Use Bundled NETStandard.Library \ NETCoreApp versions instead of explicitly specifying one 2017-04-25 12:52:11 -07:00
Ajay Bhargav Baaskaran 52c4abee9b Fix build break 2017-04-21 13:38:39 -07:00
Ajay Bhargav Baaskaran 4e2cd0c2d6 Finish writer implementation of the remaining IR nodes and added tests
- SetTagHelperPropertyIRNode
- ChecksumIRNode
- UsingStatementIRNode
- Preallocated attributes target extension
- HtmlAttributeIRNode and friends
- Design time directive helper target extension
- Removed renderers and rendering conventions
- Regenerated IR baselines
Issue - #846 and #1051
2017-04-21 11:46:34 -07:00
N. Taylor Mullen 1696e2aebf Upgrade Razor's Roslyn dependency to 2.0.0.
- Added C# 7 test to validate questionable features work end-to-end.
- Had to add several explicit package references to let our VS specific packages work as expected.

#1046
2017-04-21 11:40:21 -07:00
N. Taylor Mullen c25aadf599 Enable page directive to handle malformed text.
- Made a targeted fix to PageDirective that stops it from crashing Visual Studio when its malformed.
- Added unit test to validate PageDirective didn't throw when attempting to determine if something was a page.
- Added an integration test to validate malformed page tags can make their way through the entire Razor pipeline and don't destroy the rest of the content.

#1247
2017-04-20 14:05:54 -07:00
N. Taylor Mullen 715aa9bcae Fix cross plat tests for TagHelperBinderSyntaxTreePassTest. 2017-04-20 13:33:00 -07:00
N. Taylor Mullen f31b45d84a Enable TagHelper directives to handle malformed text.
- Prior to this change we'd try to substring a TagHelper directive with length 1 but our substring call would be for -1 (explosions).
- Added tests to validate that `@tagHelperPrefix`, `@removeTagHelper` and `@addTagHelper` all behave properly when they have malformed quotes.

#1242
2017-04-20 11:43:38 -07:00
Andrew Stanton-Nurse e856224682 react to removal of PlatformAbstractions (#1243) 2017-04-20 09:30:59 -07:00
N. Taylor Mullen 6f7cb763a2 Update TModel code generation.
- Prior to this TModel would be set to a potentially non-fully qualified name. This would cause errors in default MVC templates.
- Regenerated test files to reflect new TModel.
- Updated unit test to reflect new behavior.

#1222
2017-04-14 12:32:20 -07:00
N. Taylor Mullen d273c6cd4c Ensure output hint descriptors don't schema check.
- Prior to this if you had a `TagHelper` whos output hint was not in the final form of the completions we'd fall through into a schema check which resulted in a completion being added when it shouldn't. Example: `TagHelper` for `my-tr` that has an output hint of `tr` would end up getting added to the completion list under `body` because `my-tr` was not in the schema and would then be treated like the `environment` `TagHelper` (a new element).
- Added a test to validate that `TagHelper`s with output hints are cross referenced vs. existing completions and do not fall through to a schema check.

#1225
2017-04-14 12:14:52 -07:00
Ajay Bhargav Baaskaran 0b17f14d68 Moved AddTagHelperHtmlAttribute from renderer to writer 2017-04-14 11:49:56 -07:00
N. Taylor Mullen cf44f103c1 Prefix TagHelpers with tag helper prefix in completion list.
- We don't want tooling applying tag helper prefix to what we deem `TagHelper`s. Ultimately we should consume all the necessary data and do that work.
- Added two tests to validate that we're applying tag helper prefix to `TagHelper` element completions for catch-all's and non-catch-alls.

#1224
2017-04-14 11:40:28 -07:00
N. Taylor Mullen 46a5ca972f Allow catch-all THDs to apply to all completions.
- Prior to this catch-alls were explicitly ignored not to populate the IntelliSense with an excess amount of `TagHelper`s. To maintain backwards compatible expectations this commit reverts that expectation.
- Scoped an existing test to only test its primary scenario.
- Added a new test to verify that catch-alls accurately apply to all completions (including dynamically added ones).

#1219
2017-04-13 23:35:59 -07:00
Ajay Bhargav Baaskaran cd486226d6 [Fixes #1195] Add a way to parse just until the first directive 2017-04-13 15:02:17 -07:00
Ryan Nowak c0e3519bc3 Set an order on @inject to run behind @namespace
The problem is that @inject uses the type name, and @namespace can change
it. Setting an explicit order makes sure that these things happen in a
sensible sequence.
2017-04-13 13:59:47 -07:00
N. Taylor Mullen 3b31e977b2 Fix ability to generate baselines.
- Prior to this removing the `__RemoveThisBitTo__` wasn't sufficient to generate baselines; reason being the constants were defined in the wrong assembly. Since we moved test infrastructure bits around the constants needed to follow.
2017-04-13 11:07:02 -07:00
N. Taylor Mullen a1cfd22a32 Add element completion API for TagHelpers.
- Added a new `TagHelperCompletionService` which can be queried for information on what completion information should be provided.
- Added tests to validate the completion service's expectations.
- Fixed an issue where `TagHelper`s with output hints that did not exist in a passed in completion would never be highlighted as `TagHelper`'s; even when their primary targeting element was already in the element completion list.

#1181
2017-04-12 14:31:11 -07:00
N. Taylor Mullen 1b8a4e704c Rename ITagHelperDescriptorBuilder => TagHelperDescriptorBuilder.
#1210
2017-04-11 17:08:38 -07:00
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 64e5aaf478 Remove some dead code 2017-04-11 10:24:34 -07:00
Pranav K e2267f54a6 Add support for naming a page (#1204) 2017-04-11 10:10:45 -07:00
Ryan Nowak 1fbdb30186 Normalize newlines in default imports
Needed for xplat
2017-04-11 08:19:56 -07:00
Ryan Nowak 35bbede0ac Remove unused files 2017-04-10 19:47:41 -07:00
Ryan Nowak 303636db13 Updates to generated .cs files
A separate commit so that it's reviewable. Only things derived from the
file path have changed.
2017-04-10 19:43:03 -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
Ryan Nowak 1262a6d4b2 Adding CodeGeneration benchmark 2017-04-10 14:25:43 -07:00
Ryan Nowak acf3e759d1 Add BenchmarkDotNet boilerplate 2017-04-10 14:25:43 -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 0481cc6569 Fix travis
We were missing the newline normalization from the test base class.
2017-04-06 11:26:52 -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
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 Brandenburg a22bfa5265 Fix build break 2017-04-04 11:30:05 -07:00
Ryan Brandenburg 9e12230eef Add RazorPage test without model 2017-04-04 10:54:20 -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
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
N. Taylor Mullen 385531f11a Workaround issues preventing tests from running in Visual Studio.
#1139
2017-03-31 11:20: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 737a9a58ad Fix breaks in Razor Tests
I removed a reference from a src project which exposed this issue. We
shouldn't be using these types in new Razor.
2017-03-27 14:32:30 -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
Ryan Brandenburg b4640f8bb8 Use AspNetCore.Mvc.RazorPages 2017-03-24 13:08:07 -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 ae34e14358 Don't generate line mappings for imports 2017-03-23 10:39:07 -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
Ajay Bhargav Baaskaran c6a35e7b26 Added HasIndexer property to BoundAttributeDescriptor 2017-03-21 16:18:31 -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 bbd08f0cc9 Add TagHelper directive and match info to CodeDocument 2017-03-19 12:33:09 -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 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 9b3e8d0cda React to aspnet/Testing#259 2017-03-16 09:31:55 -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
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
Ryan Nowak 9a27405718 Add LanguageServices test project 2017-03-06 17:55:00 -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 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 a6d611aecd Introduce RazorCompilation 2017-02-22 10:22:18 -08:00
Ajay Bhargav Baaskaran cb5b8a45f1 [Fixes #959] Generate LineMapping for Using statements with source
- Also generate/test IR baselines with all code generation tests
2017-02-21 16:51:05 -08:00
Ryan Nowak c76ae277a3 Add baselines for codegen tests
This will make is much easier to investigate failures that bubble up to
the codegen level. You'll be able to see if there was a change to the IR
rather than just the final code.
2017-02-17 16:41:46 -08:00
Ryan Nowak 1ae0b21630 Replace CSharpIRToken with RazorIRToken
Deletes CSharpIRToken to use the more general RazorIRToken class.

Rather than using the visitor to visit tokens, now writing a
CSharpExpresionIRNode is an 'atom', and will write its tokens itself.
2017-02-17 16:27:31 -08:00
Ajay Bhargav Baaskaran ed9068cef4 Replace RazorError with RazorDiagnostics in public API 2017-02-17 15:44:37 -08:00
Ryan Nowak 965ae5490f Introducing RazorIRToken
This IR node will be part of the new token model for IR. It will be used
by all nodes that contain user content. Going forward, tokens will be the
thing that contains text and produces line mappings.

This commit just introduces the class.
2017-02-17 11:22:53 -08:00
Pranav K 075771a12d Re-enable netcoreapp1.1 tests (part 2) 2017-02-16 15:29:31 -08:00
Pranav K cfa4689d47 Re-enable netcoreapp1.1 tests
Fixes #1003
2017-02-16 14:09:12 -08:00
Ryan Nowak e35ee53ee5 DefaultRazorIRLoweringPhase is too agressive
This change fixes a bug where DefaultRazorIRLoweringPhase is too
aggressive in merging HTML spans. You can hit the bug by delimiting two
html spans with a metacode character like:

<foo>@{ <bar/> }</foo>

The lowering phase will combine these HTML nodes, which is invalid as they
don't have contiguous spans.

The change here is to merge spans only when they both have an invalid
location or are contiguous.
2017-02-16 10:53:09 -08:00
Ryan Nowak 7a1a6dd1d6 Part 2 of RuntimeTarget
Introducing ExtensionIRNode and an implementation of templates based on
the new feature set.

Now TemplateIRNode is-a ExtensionIRNode. It's implemented using just
extensibility and isn't part of the standard razor codegen. I'm adding it
to the RazorEngine so that it's still there by default.

I've also included a pattern for visitors to special case
ExtensionIRNode-derived classes that they know about. This requires a
little bit of boilerplate but makes it easy to traverse just the nodes you
care about while keeping the set of nodes open.

For now the general codegen feature still hasn't had a refactor, but this
opens things up for us to start finishing things like MVC's @inject
directive.
2017-02-15 18:08:19 -08:00
Ajay Bhargav Baaskaran 4b2245eeb9 [Fixes #924] Correct RightShiftAssign operator 2017-02-15 16:31:40 -08:00
Nate McMaster 4fd441ae35 Temporarily disable tests on .NET Core that rely on .NET Core 2.0 API 2017-02-15 10:04:59 -08:00
Nate McMaster 279855d947
Downgrade to stable packages 2017-02-14 16:15:35 -08:00
Ajay Bhargav Baaskaran 8ac5468714 Refactor IR phases
- Added DirectiveRemovalIRPass
 - Added IRazorDocumentClassifierPhase, IRazorDirectiveClassifierPhase and
   IRazorIROptimizationPhase
 - Added all the related passes and default implementations
 - Refactored DefaultDirectiveIRPass to do the right thing
 - Execute method in IR passes now return void
 - Added tests for the new phases
2017-02-14 14:51:36 -08:00
Pranav K 80172c641d Fix building the vsix inside VS 2017-02-14 12:55:43 -08:00
Doug Bunting 4861ef3391 Bump test projects up to .NET 4.5.2
- aspnet/Testing#248
- xUnit no longer supports .NET 4.5.1
- build tests for desktop .NET only on Windows
2017-02-14 08:48:29 -08:00
Ryan Nowak 0dbf62196c Introduces RuntimeTarget and abstraction for APIs
This is a new abstraction that represents the api surface available for
codegen to target. Every kind of document should have an associated
RuntimeTarget or just use the default.

To prevent breakage, our DocumentClassifierBase class will provide a
default API set to implementors (like MVC).

I haven't fundamentally changed how codegen is done yet, I've just hidden
it behind a new abstraction. The RuntimeTarget now is also responsible for
selecting between design time and runtime.

The bulk of the noise here is from splitting a lot of the codegen stuff
into its own files.
2017-02-13 15:34:51 -08:00
N. Taylor Mullen f861c23d1f Allow RazorSourceDocument to consume empty streams.
- Added tests to validate how encoding flows when used with empty streams in addition to their usability (not throwing).

#947
2017-02-13 12:11:38 -08:00
Ryan Nowak 62420209a5 Fix a failing test 2017-02-09 16:19:34 -08:00
Ryan Nowak ea778b9b6d Implement a simple base for document classifiers
This should allow us to de-dupe a lot of code in MVC.
2017-02-09 15:22:33 -08:00
Ajay Bhargav Baaskaran 260b869a07 Remove DirectiveIRNode from the IR document after the default directive classifier has run 2017-02-09 12:56:58 -08:00
Ajay Bhargav Baaskaran 02675da467 Handle single line directives properly 2017-02-08 13:41:27 -08:00
Pranav K d293547f24 Adding more tests 2017-02-08 11:17:43 -08:00
Pranav K 8b764c57e4 Parse string directive tokens correctly 2017-02-08 11:17:43 -08:00
Pranav K 2eba53de1b Add support for optional directives 2017-02-07 19:20:49 -08:00
Ajay Bhargav Baaskaran adf18d4810 Make LineMapping public 2017-02-03 15:50:34 -08:00
N. Taylor Mullen 3f5d1bb2d6 Remove literal directive tokens.
- Literal directive tokens acted as a way for a user to provide markup bits to be required when parsing a directive.
- Removed source implementations.
- Removed tests validating the feature.

#969
2017-02-03 12:02:16 -08:00
Pranav K a801a49377 Add an API to RazorProject to navigate hierarchical files
Fixes #962
2017-02-03 11:25:15 -08:00
N. Taylor Mullen c49d7b8c27 Add support for new style Roslyn dotless commits.
- Roslyn swapped the way they performed dotless commit insertions. They went from:
date => date. => DateTime.  to
date => date. => date => DateTime => DateTime.
The problem with the new approach is that date => DateTime would be rejected and therefore force the editor to reparse and reclassify any dots as HTML giving improper IntelliSense.
- Updated Razor implicit expression edit handling to allow identifier => identifier replacements as long as the identifiers didn't result in keyword or directives.
- Added tests to verify the scenarios impacted.
2017-02-01 15:43:08 -08:00
Ajay Bhargav Baaskaran 7af2f6ff36 [Fixes #961] Disable instrumentation for TagHelper attribute values 2017-02-01 15:26:13 -08:00
Ryan Nowak e549270b4a Add RazorDiagnostic type
This is a replacement for RazorError, is conceptually equivalent with
Diagnostic from Roslyn.

The next PR will start exposing this through our public API rather than
the legacy type.
2017-01-31 15:53:22 -08:00
Ajay Bhargav Baaskaran 406522d14b [Fixes #958] Added support for AddTagHelper, RemoveTagHelper and TagHelperPrefix directives 2017-01-30 15:40:05 -08:00
Ryan Nowak 93981ab13e Update codegen to be compatible with MVC 2017-01-27 16:47:33 -08:00
Ryan Nowak 2b2cf6efec Correct an issue with codegen for taghelperprefix
The issue here is that when a taghelper prefix is in use it will be
including in the HTML output, when it should be chopped off.

See the diff in the codegen for examples.
2017-01-27 11:13:46 -08:00
Ryan Nowak d187edbd76 Use the TagHelperBinder to dedupe taghelpers
This change does deduplication of taghelpers during the binding/rewriting
phase. This is needed when a taghelper has multiple sets of html
attributes that are required (behaves like an OR). This is used lots in
MVC.

The old codebase used to do this in the codegen phase, but it seems
beneficial to do as early as possible.
2017-01-26 15:36:42 -08:00
Ajay Bhargav Baaskaran 98d5d1c70e Flow parser errors over to the CSharpDocument 2017-01-26 15:32:03 -08:00
Ryan Nowak 0bf9abbedf Hardcoding the right value for MVC 2017-01-26 13:39:55 -08:00
Ryan Nowak 6a95002f0e Fix lowering of taghelpers inside a section
The IR lowering phase was attaching the 'tag helper fields' node to the
builder instead of to the top-level node (document). This meant that
things wouldn't be where we expect when the first tag helper occurrence is
inside a directive block (section).

Found this porting MVC to use the new Razor codebase.
2017-01-26 13:06:06 -08:00
Ajay Bhargav Baaskaran 7725c20c47 Enabled Razor.Evolution tests on linux 2017-01-26 12:34:35 -08:00
Ryan Nowak 243446d225 Quick fix for MVC. Hardcoding fullname of HelperResult. 2017-01-26 10:37:52 -08:00
Ryan Nowak ec45d8ea8c Remove typeof from codegen
The C# codegen was using some of the new names for various TagHelper
constructs instead of the old namespace.

This change reverts to the old names.
2017-01-24 13:45:50 -08:00
Ryan Nowak 03b63d97a2 Quick fixes from MVC
We're close to hooking up new Razor to MVC. This is a set of enabling
'quick fix' changes to resolve some blockers to using Razor.Evolution in
the product.

Main issues:
 - Types not public enough - anything in the .Legacy namespace is still
   slated from 'improvement'
 - Wrong references. We don't want .Workspaces in MVC, so moving the heavy
   lifting of TagHelper discovery to CodeAnalysis.Razor.
2017-01-24 09:22:28 -08:00
Ryan Nowak 851dd7ba3b Add support for TagHelper directives
This commit adds support to the TagHelperBinderSyntaxTreePass to interpret
@addTagHelper, @removeTagHelper, and @tagHelperPrefix.

I also ported all the original tests for this feature and updated them to
call new APIs.

The bulk of the changes here were updates to baseline tests that weren't
correctly using @addTagHelper
2017-01-20 17:44:35 -08:00
Ryan Nowak 9ecd30cb2f Add Microsoft.CodeAnalysis.Razor
This project will have all of our roslyn-dependent infrastructure that we
need for designtime and runtime.
2017-01-20 15:26:39 -08:00
Ryan Nowak 4a49ee2164 Adds support for imports to IR lowering
This change adds support for 'imports' - extra source files which contain
directives that can merged with 'main' source files. The purpose of course
is to support things like global usings or addTagHelpers, like
_ViewImports in MVC does today.

Instead of a one-off this is now a feature of the Razor langugage since
things like addTagHelper have an impact on the parsing behavior. Also,
having a standard imports concept keeps out feature creep, for instance
the 'global' usings we have today could really just be an import.

Imports allow single-line directives including the fundamental directives
like addTagHelper, using, and other friends. Code, content, and block
directives are not merged and will be ignored. We can consider making
these kinds of things warnings in the future.
2017-01-20 10:43:53 -08:00
Nate McMaster 79663ef90e Upgrade to RC.3 2017-01-20 09:01:49 -08:00
N. Taylor Mullen 6e647854fa Add support for `ViewComponentTagHelpers`.
- Hardcoded `ViewComponent` discovery.
- Hardcoded `ViewComponentTagHelperDescriptor` creation.
- Added test to validate that ViewComponents are discovered and transitioned into TagHelpers properly.
- Avoided adding a reference to MVC to prevent circular references. This resulted in custom marker attributes to represent `ViewComponent`s. Also made a lot of use of `ViewComponent` conventions (ending in "ViewComponent").

#932
2017-01-19 10:18:11 -08:00
Ryan Nowak a84f35022e Rename a test
Imports is something different, this is a test for usings.
2017-01-18 15:33:35 -08:00
Ryan Nowak be10bb5f7b Remove support for includes
I was mistaken, this isn't a feature we will need for _ViewStart.
2017-01-18 09:11:03 -08:00
BrennanConroy ea21469c11 Change Xunit versions 2017-01-17 16:42:34 -08:00
N. Taylor Mullen d218bc3173 Remove AssemblyName requirement from TagHelperDescriptorFactory method.
- The assembly name is accessible on the provided type. No need to pass one in.
2017-01-17 14:47:40 -08:00
Ryan Nowak d7527d2e0a Create new way of suppressing unique Id generation
Adds a way of suppressing generation of guid ids that isn't based on a
global static.
2017-01-17 11:06:41 -08:00
Ryan Nowak 242ea0ee3f Add parsing of includes and imports
Also adds the source document to the RazorSyntaxTree and does some cleanup
related to this. This lets us verify which tree goes to which document and
that seems important.

Added basic tests to verify that parsing happens, though it's not being
used for anything right now.
2017-01-13 11:25:20 -08:00
N. Taylor Mullen 8215d28ada Port TagHelperDescriptorFactory tests.
- Ported the existing descriptor factory tests and fixed issues with the current implementation.
- Ported documentation tests with the exception of the localization variants.
- Updated the DefaultTagHelperResolver to filter TagHelper types based on accessibility.
- Added DefaultTagHelperResolver tests.

#851
2017-01-13 10:35:10 -08:00
Ryan Nowak 208da8ca12 Add plumbing for imports and includes
Groundwork for support of _ViewImports _ViewStart and others.
2017-01-12 09:25:19 -08:00
Ajay Bhargav Baaskaran ffd455b77e Adds Instrumentation support
Instrumentation is added as an optional pass that can be configured by
MVC.
2017-01-11 17:27:52 -08:00
N. Taylor Mullen ee59368467 Add Microsoft.CodeAnalysis.Razor.Workspaces.Test project.
#851
2017-01-10 12:12:36 -08:00
Ryan Nowak e072a7f452 Fix build break
These baselines needed to updated after changing the namespace
of this type.
2017-01-10 11:53:39 -08:00
Ryan Nowak 59b24fb724 Make TagHelperDescriptor public for tooling 2017-01-10 09:06:05 -08:00
N. Taylor Mullen ead9692ab1 Disable Cross plat tests for design time code gen tests. 2017-01-09 15:25:38 -08:00
Nate McMaster 91bc4b3940 Remove redundant references 2017-01-05 18:12:53 -08:00
Ryan Nowak e104451f79 Make SourceSpan public
Cleansup SourceSpan and makes it public where its used.
2017-01-03 12:46:56 -08:00
Ajay Bhargav Baaskaran eb0a2a1833 [Fixes #915] Added TagHelper preallocated attribute optimization pass 2017-01-03 11:05:57 -08:00
Ryan Nowak 6b075880ce Clean up SourceLocation
This change makes SourceLocation public and moves some of the undesirable
functions off of the class and into the .Legacy namespace.
2017-01-03 10:01:48 -08:00
Ryan Nowak e84bc66700 First cut of adding API sets
This change defines stages for IR processing. The comments in RazorIRPass
really explain the details. I've also made the preliminary changes to the
stuff we've built so far to follow the new conventions.

This is building towards multitargeting for Razor, being able to target
both Razor Pages and Razor MVC Views from the same engine, being able to
target different codegen and methods from within the same engine.
2016-12-30 17:58:39 -08:00
Ryan Nowak f45afb6c19 Add a test for using with trailing newline
I couldn't find a test like this, but I've been debugging an issue in this
scenario.
2016-12-30 16:06:18 -08:00
Ryan Nowak 0835de17ec Adds stronger verification for spans
This change ensures that spans are contiguous and that all source is part
of a span. This means that a character can't be 'lost' and not a member of
any span.

And guess what? We have a bug like that. So now a few tests are skipped
due to that bug.

Also made some changes to tests that construct invalid spans or spans
without correct locations as their expected input. This allows us to add
the above verification to all parser tests.
2016-12-28 21:56:35 -08:00
Ryan Nowak f191cc62a2 Get rid of locations on Tokens. 2016-12-28 18:22:06 -08:00
N. Taylor Mullen e65c2ef1ef Upgrade to netcoreapp1.1 to fix test failure. 2016-12-28 15:55:16 -08:00
Ajay Bhargav Baaskaran 0dacf01f54 [Fixes #912] Added TagHelper design time code generation support 2016-12-28 15:22:07 -08:00
Ajay Bhargav Baaskaran 9dece91975 [Fixes #882] Added TagHelper runtime code generation support 2016-12-27 11:29:25 -08:00
N. Taylor Mullen f47a40a4a7 Add Razor design time code generation.
- Added a common csharp rendering phase base to put shared assets of runtime and design time code gen.
- Added a new `DesignTimeIRPass` to setup the IR bits to provide accurate intellisense.
- Added a `CodeGenerationIntegrationTest` and moved the RuntimeCodeGenerationTests into it. This way we can re-use the cshtml files and it makes searching/running the tests easy..
- Updated how line mappings are calculated for some nodes.

#848
2016-12-27 11:06:58 -08:00
Ajay Bhargav Baaskaran af499794c5 [Fixes #878] Removed marker nodes from IR
- Also fixed SourceMappings content length in Markup spans
2016-12-22 15:11:52 -08:00
N. Taylor Mullen c6150ba287 Move section support into IR.
- Previously we'd special case `@section` at code generation time; now we transform the directive into an IR node.
- Changed the expectations of `DefineSection` to not take in a section writer. It's now expected to modify what `Write`, `WriteLiteral` etc. write to when inside of the lambda. This is done today in TagHelpers via `StartTagHelperWritingScope`.
- Updated baseline files to reflect new `DefineSection` expectations.
- Updated IR tests since we no longer leave around `DirectiveIRNode`s.

#901
2016-12-22 14:39:25 -08:00
Pranav K 7657ea41a3 Updating to 4.4 CoreFx packages 2016-12-21 22:43:57 -08:00
Ryan Nowak b8e1fb8011 Add line-mapping support to RazorSourceDocument 2016-12-20 09:06:12 -08:00
Ryan Nowak b473101927 Fix line endings 2016-12-20 08:56:18 -08:00
N. Taylor Mullen 88d99b06b3 Skip Razor.Evolution tests on Linux and Mac.
- Source ranges currently aren't normalized when they're input into the system. Due to how we serialize pieces of the code this breaks cross plat because of newline differences.
- This is a temporary work around to get the build passing cross plat.
2016-12-19 15:03:32 -08:00
Nate McMaster 705a490acb Upgrade to VS 2017 2016-12-16 16:04:22 -08:00
Ajay Bhargav Baaskaran e2dd09c918 [Fixes #881] Added TagHelper IR support 2016-12-15 11:46:35 -08:00
N. Taylor Mullen 61b2b0d4e7 Add model for differentiating design time and runtime parsing.
- If needed, a phase/feature can always retrieve the syntax tree to lookup whether the parse tree was made in a "design time" fashion.
- Future DesignTime / Runtime specific bits will be added to their corresponding `AddRuntimeDefaults`/`AddDesignTimeDefaults` methods.
2016-12-14 12:39:25 -08:00
N. Taylor Mullen eb230e0408 Port existing CSharp code generation integration tests.
- Added code generation test infrastructure to validate ported tests.

#847
2016-12-14 11:18:31 -08:00
N. Taylor Mullen 5d4c4e1ccf Add Razor runtime code generation.
- Added TabSize,IsIndentingWithTabs and NamespaceImports to the RazorParser options. These are replacements for the existing RazorEngineHost abstraction.
- Added RazorParserOptions consumption pattern to more than just the parsing phase.
- Added a ChecksumIRNode to ensure Debugging can work.
- Updated tests to to react to new Checksum and Namespace nodes in the IR tree.
2016-12-14 11:18:30 -08:00
N. Taylor Mullen 2db4985c21 Modify functions, section and inherits to use extensible directives.
- Removed existing type names used to track `@functions`, `@section` and `@inherits`.
- Updated parsing logic to reflect existing directive behaviors.
- Added additional IR and syntax tree pass in order to fulfill the default directive expectations.
- Updated tests to to expect new extensible directives parse structure.

#894
2016-12-14 11:12:40 -08:00
N. Taylor Mullen f09fd291a7 Make `HtmlContentIRNode` content newlines platform agnostic.
- Prior to this the platform that the newlines were escaped on would be the platform the baselines would pass on.
- Updated baselines to reflect new newline escaping.

#888
2016-12-08 10:59:52 -08:00
N. Taylor Mullen 2639fad8ab Transitioned SourceLocation => MappingLocation on IRNodes.
- Also modified the property name from `SourceLocation` => `SourceRange` to avoid ambiguity.
- Updated IR baselines
- Updated IR baseline infrastructure to conditionally render the document location.

#884
2016-12-08 10:18:28 -08:00
Ryan Nowak 026f9ffb69 Nodes that have children should use .Children
This removes special casing for nodes that contain children that were
hiding them in a .Content or .Value property.
2016-12-07 17:58:31 -08:00
N. Taylor Mullen 18bb31cee4 Change IntegrationTestBase to properly locate baseline files in net451.
- Net451 tests would have their current directory set to the dll that was located in bin/debug/framework/rid/... when run via `dotnet test`.

#885
2016-12-07 16:29:50 -08:00
Ryan Nowak 853c28e568 Add integration testing
This change adds a basic framework for doing baselined integration tests.
This is very similar to what we do elsewhere with generated files and
tests that read them from resources.

What's here now is the support to do this kind of baselining with IR in a
pretty readable serialization format.

This is a building block and the intent is that we'd do something similar
in the future for syntax nodes and C# source.

Looking at the code of the tests in particular, we'll also build the
ability to capture the documents at key points (such as before/after a
targeted phase) and then verify them in the same manner.
2016-12-06 11:25:04 -08:00
Ryan Nowak 2190dc2096 Add RazorCSharpSourceDocument
Precursor to actual CSharp lowering
2016-12-04 23:30:55 -08:00
Ryan Nowak 9cefcdd450 Add legacy dependencies of C# lowering 2016-12-04 23:30:34 -08:00
Ryan Nowak 03549bb542 Add end-to-end support for extensible directives
This change adds a way to actually configure the RazorEngine to use
extensible directives (previously buried behind legacy API). As part of
this feature adds the RazorParserOptions class to encapsulate anything
else that becomes a parser options (ahem taghelpers).

Now we have a pattern for this when we get there.

Options are propagated as part of the RazorSyntaxTree for
testability/sanity and this was actually responsible for the bulk of the
changes.

Also added some extension methods for adding directives to the
IRazorEngineBuilder and an end to end integration test.
2016-12-03 18:44:54 -08:00
Ryan Nowak 46018f9512 Add IR phase
This change adds a phase which runs IR passes. Design and code are almost
exactly the same as the existing SyntaxTree phase. However all of this is
public because the IR is public API.
2016-11-29 21:28:27 -08:00
N. Taylor Mullen 518378f499 Add extensible directive abstractions
- Based generic directive implementation off of descriptors.
- Added parsing logic to consume descriptors and parse content that's expected.
- Added parsing errors to automagically detect unexpected directive pieces.
- Updated visitor implementations to understand the directive bits.
- Added a builder abstraction to easily create descriptors. Had to maintain the ability to manually construct a descriptor to enable convenient serialization/deserialization.
- Added tests/comparers to verify correctness of parsing.

#853
2016-11-23 19:56:40 -08:00
N. Taylor Mullen cf7489e600 Port WhiteSpaceRewriter and ConditionalAttributeCollapser.
- Add an `HtmlNodeOptimizationPass` that does all of the `RazorSyntaxTreeRewriting` that legacy used to achieve outside of `TagHelper`s.
- Add tests for `HtmlNodeOptimizationPass` to verify it's executing appropriate bits.

#849
2016-11-22 12:04:31 -08:00
N. Taylor Mullen aa58ea6907 Change IR implementations to not hold all information in children.
- Added conditional attribute test.
- Reacted to Html optimization pass in tests.
- Removed directive IR bits since they'll be handled by the extensible directive system.

#844
2016-11-22 11:54:13 -08:00
Ryan Nowak d8b626c843 Implement IR lowering phase
This is a first cut of IR lowering and includes the basic node types and
some tests.
2016-11-22 11:25:23 -08:00
N. Taylor Mullen d0e1b810c4 Fix test case so it works cross plat.
- This just happened to be working on Windows. Newlines!
2016-11-21 14:52:52 -08:00
N. Taylor Mullen 6c8ef157b4 Add TagHelper binding abstractions.
- Added a TagHelperFeature to hold TagHelper specific pieces that can be replaced.
- Built a syntax tree pass that applies the ported TagHelper bits.
- Updated tests that expected different RazorEngine defaults.
- Added new tests to verify binder pass.
2016-11-21 11:04:42 -08:00
N. Taylor Mullen 26a1cf3cff Port existing TagHelper infrastructure.
- Modified how tests are run to reflect our new test infrastructure.
- Added TagHelper assertion bits.
- Moved all classes to the Evolution.Legacy namespace.
- Copied Test.Sources bits to the Evolution.Test project.

#845
2016-11-21 11:01:10 -08:00
N. Taylor Mullen 51fb0c993b Add indexability to the RazorSourceDocument.
- Removed the `CreateReader` API in favor of a `CopyTo`, `Length`, `[index]` and `Encoding`.
- Updated existing APIs to react to the change.
- Added tests.
2016-11-21 10:58:09 -08:00
N. Taylor Mullen dbcb690120 Update Razor.Evolution versions and package verifier. 2016-11-16 14:21:52 -08:00
Pranav K 1562865ca6 Add RazorProject - an abstraction for working with Razor files in a project
Fixes #842
2016-11-16 14:06:03 -08:00
Ryan Nowak d42a4c84a1 Rename IR* -> RazorIR* 2016-11-16 14:06:03 -08:00
Ryan Nowak d40f6d3151 Add abstractions for Razor IR
This is an API skeleton for the IR data model that we'll be using as a
spiritual continuation of the 'chunks' API. Currently missing a lot of
detail which will be filled in as needed.
2016-11-16 14:06:02 -08:00
Ryan Nowak b74ea5d74e Fix failing tests 2016-11-16 14:06:02 -08:00
Ryan Nowak b341340d1f Add skeleton of syntax phases 2016-11-16 14:06:01 -08:00