Commit Graph

451 Commits

Author SHA1 Message Date
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
Ryan Nowak 49d3574677 Make tests public - xUnit requires this 2016-11-16 14:06:01 -08:00
N. Taylor Mullen d06e5b6002 Add legacy parser 2016-11-16 14:06:00 -08:00
Ryan Nowak 6b9b75841f Add Razor Evolution Engine and primitives 2016-11-16 14:05:58 -08:00
N. Taylor Mullen 17f3e3bbab Initial project skeleton for Razor Evolution 2016-11-16 14:05:57 -08:00
Pranav K c746fd81df Updating versions to 1.2.0-* 2016-11-09 14:19:11 -08:00
Jass Bagga 77ed9f22fc Moved location of and modified CaseSensitiveTagHelperAttributeComparer
Addresses Mvc https://github.com/aspnet/Mvc/issues/5323
2016-11-01 14:47:13 -07:00
Pranav K 8a057d5491 Updating to netcoreapp1.1 2016-10-13 11:23:50 -07:00
Pranav K 7bc3d440bd Revert "Updating to netcoreapp1.1"
This reverts commit c17540f02c.
2016-10-12 16:09:28 -07:00
Pranav K c17540f02c Updating to netcoreapp1.1 2016-10-12 13:46:19 -07:00
Pranav K 039e1021a4 Updating partner package versions 2016-09-28 11:51:56 -07:00
Crystal Qian d19845730f Added a copy constructor for tag helper descriptors. (#827) 2016-08-31 15:38:35 -07:00
Crystal Qian 127e095370 Added property bag to tag helper descriptor. (#822)
aspnet/Mvc#1051
2016-08-25 18:04:17 -07:00
Crystal Qian b34543621f Added property bag to tag helper descriptor. (#822)
aspnet/Mvc#1051
2016-08-25 09:31:29 -07:00
Crystal Qian 489c0d9046 Added view component tag helper updates. (#823)
Added view component tag helper updates.

aspnet/mvc#1051
2016-08-24 16:01:59 -07:00
N. Taylor Mullen 8d7c51bd60 Change TagHelpers to work in partial parsing.
- Prior to this change any query for ownership within a TagHelper would never succeed.
- TagHelpers structure can be influenced greatly by changes to the tags start/end body; therefore, only allowed modifications to TagHelper attribute values to avoid complexity and enable the more widespread scenario of a user typing C# code in an attribute value.
- Updated existing tests to reflect the new edit handlers that were added to TagHelper attributes.
- Added partial parsing tests to verify partial parses succeed/fail when expected.

#792
2016-08-15 16:15:41 -07:00
N. Taylor Mullen 82c9c40709 Capture exceptions when trying to parse files and return parse errors.
#808
2016-08-11 12:11:51 -07:00
Ajay Bhargav Baaskaran f09e2bf571 [Fixes #804] Fixed unsafe cast in CSharpCodeVisitor 2016-08-08 16:38:51 -07:00
Ajay Bhargav Baaskaran 687b3f6911 [Fixes #815] Fix Debug.Assert failure for malformed tags in expression 2016-08-08 16:34:38 -07:00
Pranav K f0f3832c14 Updating to Moq \ Castle.Core that does not require imports 2016-08-08 11:59:09 -07:00
N. Taylor Mullen fc4a61586e Obsolete `EditorHints`.
- For tests added grouped pragma warning disables to not pollute the test files with too many duplicate warning disable/restores.

#780
2016-08-01 11:08:03 -07:00
Doug Bunting 05a52f445f One build to rule them all
- well, at least VS and command-line builds will share output
- part of aspnet/Coherence-Signed#277
2016-07-07 12:26:20 -07:00
Ajay Bhargav Baaskaran 837b304c32 Updating to RTM builds of xunit and Moq 2016-06-30 16:34:57 -07:00
N. Taylor Mullen 9c4eee14b8 Update tests to follow developer guidelines.
- Moved tests to match their corresponding test src files.
- Updated test namespaces to match their corresponding test src files.

#782
2016-06-21 12:08:50 -07:00
Pranav K eb2b58188a Updating to dev versions
# Conflicts:
#	test/Microsoft.AspNetCore.Razor.Test/project.json
2016-06-16 10:41:31 -07:00
jacalvar 76757ee82f Update Json.NET to 9.0.1 2016-06-15 15:13:08 -07:00
N. Taylor Mullen 4b43597d28 Remove direct Microsoft.NETCore.Platforms dependency.
- Microsoft.NETCore.App now pulls this package in.

aspnet/Coherence-Signed#344
2016-06-13 15:28:51 -07:00
N. Taylor Mullen e20d18636e Move more classes into Internal namespaces.
- These classes aren't needed as top level public classes.

#779
2016-06-13 13:53:14 -07:00
N. Taylor Mullen 6e4f15bad4 Remove unused/unpurposeful classes.
- Several classes are legacy and left over from many changes in the Razor code base. This changeset removes those classes.
- Also moved several corresponding test cases

#778
2016-06-09 15:51:43 -07:00
jacalvar 2256138650 Update Json.NET to 9.0.1-beta1 2016-06-03 13:08:26 -07:00
mnltejaswini 3b9539960b [Perf] Preallocate TagHelperAttributes for simple bound string valued attributes Fixes #704 2016-06-01 11:24:32 -07:00
Doug Bunting 44f0aa63c6 Do not HTML encode while checking for whitespace
- #760
- using a `NullHtmlEncoder` improves `TagHelperContent.IsEmptyOrWhiteSpace` semantics
 - e.g. a tab is still a tab after encoding
 - also avoids `NotImplementedException`
- implement `Write(char)` for char-by-char `IHtmlContent` corner case
2016-05-31 22:09:19 -07:00
N. Taylor Mullen e14f4b095d Track `TagHelperAttribute` quotes.
- Removed `Minimized` from `TagHelperAttribute` and replaced it with `HtmlAttributeValueStyle`.
- Removed `AddMinimizedTagHelperAttribute` method from `TagHelperExecutionContext` since we always provide a `HtmlAttributeValueStyle` now.
- Stopped manually escaping double quotes because we now know how an attribute was originally written.
- Updated tests to account for new attribute format (from kvp).

#705
2016-05-27 12:28:33 -07:00
mnltejaswini bde78dc3d4 [Perf]: Avoid ViewBuffers for writing bound TagHelper attribute values
Fixes #717
2016-05-25 12:06:03 -07:00
N. Taylor Mullen d0bf6bf841 Make HTML comments more resilient to extra end dashes.
aspnet/Mvc#4465
2016-05-24 15:34:35 -07:00
N. Taylor Mullen 80ebb4a068 Update `TagHelperDirectiveSpanVisitor` to properly capture TagHelper directive text.
- Added a test with optional quotes for each of the `TagHelperDirectiveDescriptor`s, add, remove and prefix.

#744
2016-05-23 17:07:36 -07:00
N. Taylor Mullen cdea6fd3fb Fix TagHelper directive tests to fail when expected.
- Prior to this change the equals bits were falling back to the type comparison that `ChunkGenerator` exposes.
2016-05-18 11:05:55 -07:00
N. Taylor Mullen d27ab1ce3d React to `HtmlEncodedString` rename to `HtmlString`.
- Updated test output to reflect new `HtmlString` naming.

aspnet/HtmlAbstractions.25
2016-05-17 12:13:26 -07:00
Ajay Bhargav Baaskaran 9bfa74d829 [Fixes #739] Newline after text tag rendered only if followed by html 2016-05-02 16:29:29 -07:00
Pranav K 2950c87651 Merge branch 'release' into dev 2016-05-02 14:57:07 -07:00
Pranav K 2c4b0e8a7f Fix build warnings 2016-05-02 14:39:19 -07:00
Ajay Bhargav Baaskaran b520c9c15e Fix: Newline at the end of text tag in code block is rendered as markup 2016-04-26 15:43:18 -07:00
Pranav K 1101ff55ae Use latest build of dotnet-test-xunit 2016-04-19 14:54:09 -07:00
Pavel Krymets 603d181241 Bring Microsoft.NETCore.Platforms dependency back 2016-04-18 16:56:44 -07:00
Pavel Krymets dfe83b6bac Migrate tests, tools and samples to portable 2016-04-14 15:07:34 -07:00
N. Taylor Mullen c400289de5 Change `DefaultTagHelperContent` to be smart about single content entries.
- Today `TagHelperContent`s always allocate their underlying buffer even though they typically only ever have a single entry. Added a field to enable us to only allocate the backing buffer when we absolutely need to.
- Removed `IsEmpty` from `TagHelperContent` since it was not used in any of our `TagHelper`s for simplification. Changed `IsWhiteSpace` naming to be `IsEmptyOrWhiteSpace` since it can be used to indicate either state.
- Updated tests.

#621
2016-04-05 16:09:06 -07:00
N. Taylor Mullen 4212b7e713 Add `SetOutputContentAsync` to `TagHelperExecutionContext` to prevent allocation of `Task<T>`.
- Previously we'd do `executionContext.Output.Content = await executionContext.Output.GetChildContentAsync()`. The problem with this approach is that it returned a `Task<TagHelperContent>` which could not be optimized when building in release.
- Added test to validate `SetOutputContentAsync` does the appropriate thing.

#721
2016-04-02 22:58:37 -07:00
N. Taylor Mullen 714dd5fa9e Update test files to react to new `TagHelperScopeManager` contract.
#720
2016-03-29 22:05:37 -07:00
N. Taylor Mullen f5c79b62de Prevent method => delegate conversion happening multiple times.
- The conversion now only occurs on the construction of the `TagHelperScopeManager` which only occurs once.
- Updated tests.

#720
2016-03-29 10:18:10 -07:00
N. Taylor Mullen 3c73ae9cfe Change `TagHelperOutput` and `TagHelperContext` lifetimes.
- `TagHelperOutput` and `TagHelperContext` lifetimes now mach `TagHelperExecutionContext`s. This means once a set of `TagHelper`s have run on a tag the `TagHelperOutput`/`TagHelperContext` will be re-used.
- Added tests to validate the various `Reset`/`Reinitialize` methods behaved correctly.
- Updated codegen to no longer set `TagHelperExecutionContext.Output`.

#719
2016-03-28 11:54:48 -07:00
N. Taylor Mullen d62343ade5 Temporarily skipped CSS required attribute selector test on mono.
- Will re-enable once https://bugzilla.xamarin.com/show_bug.cgi?id=39951 is fixed.
2016-03-28 10:43:23 -07:00
Doug Bunting a8d4da9f17 Add a couple of missing `global::` prefixes
- was missing when writing out full name of an `enum` value
- was missing in one case when writing out `TagHelperAttribute` type name

nit: updated `CSharpTagHelperFieldDeclarationVisitor.WritePrivateField()` to always include the prefix
- no change in generated code but centralizes the prefix addition and reduces intermediate `string`s
2016-03-26 19:12:36 -07:00
ryanbrandenburg 21be7973ea SetContent to SetHtmlContent 2016-03-25 12:05:43 -07:00
David Fowler f5fbae6776 Fixed build 2016-03-25 02:36:27 -07:00
N. Taylor Mullen 3d0bf621f3 Update `TagHelperDesignTimeDescriptorFactory` to work in CoreCLR.
- After discussion offline to maintain consistency we decided to also remove `CodeBase` fallback in the net451 scenario. This will keep CoreCLR and net451 scenarios more consistent.
- Removed `CodeBase` validation tests.
- Added `GetAssemblyLocation` extensibility point to enable proper testing of the `TagHelperDesignTimeDescriptorFactory`.

#709
2016-03-21 16:17:37 -07:00
Victor Hurdugaci 37dde59569 Fix the test projects that can't build without src because the framework assemblies are not transitively referenced when referencing packages 2016-03-17 09:15:15 -07:00
Ajay Bhargav Baaskaran a7994b818e Updated Json.Net version 2016-03-14 14:47:54 -07:00
John Luo a6dab00f37 Reacting to KoreBuild changes 2016-03-08 15:03:57 -08:00
N. Taylor Mullen e5927ddd01 Add CSS attribute selectors for `TagHelper` attributes.
- Added the ability for users to opt into CSS `TagHelper` selectors in their required attributes by surrounding the value with `[` and `]`. Added operators `^`, `$` and `=`.
- Added tests to cover code paths used when determining CSS selectors.

#684
2016-03-08 12:15:06 -08:00
Ryan Nowak 9bd06a5dfc React to changes in HTML abstractions
This change implements the new API for flattening content in Razor.

Also, some optimizations to avoid allocations on paths where we need
to encode HTML attribute values.
2016-03-04 07:56:53 -08:00
N. Taylor Mullen e6d4d6c7a1 Fix nested C# blocks when combined with C# @ symbols.
- We used to accept until markup or an ending brace which didn't allow the parser to balance nested braces.

#679
2016-03-03 12:34:35 -08:00
Doug Bunting 38183b5887 Remove project name from output path
- aspnet/Coherence-Signed#187
- remove `<RootNamespace>` settings but maintain other unique aspects e.g. `<DnxInvisibleContent ... />`
- in a few cases, standardize on VS version `14.0` and not something more specific
2016-03-02 20:58:45 -08:00
N. Taylor Mullen b00c1c1dc7 Transition to netstandard.
- dotnet5.X => netstandard1.y (where y = x-1).
- DNXCore50 => netstandardapp1.5.
- Applied the same changes to ifdefs.
2016-03-01 13:32:43 -08:00
N. Taylor Mullen 9f675abbca Pre-allocate unbound `TagHelper` attributes.
- Hoist `TagHelperAttribute` creation into `private static readonly` fields to avoid allocations on every request. With the recent `TagHelperAttribute` change that made them immutable we can now pre-allocate them without worry of them being modified.
- Added two extra class configuration pieces to enable pre-allocation.
- Updated test files to showcase new pre-allocations.

#600
2016-03-01 11:23:49 -08:00
Ajay Bhargav Baaskaran 32c75fc78e [Fixes #698] Removed unnecessary Debug.Assert in TagHelperBlockRewriter 2016-02-25 16:16:20 -08:00
Ajay Bhargav Baaskaran 6cd13c441e [Fixes #691] Use WriteAttributeTo when TextWrites is not null 2016-02-24 12:31:13 -08:00
John Luo 5ca09d0b10 Updating test TFMs for custom test discovery 2016-02-19 11:46:09 -08:00
N. Taylor Mullen 78451efa7f Pool `TagHelperExecutionContext`s within `TagHelperScopeManager`.
- Currently the `TagHelperScopeManager` creates a new `TagHelperExecutionContext` per `TagHelper` on a given page. With this change the max number of `TagHelperExecutionContext`s per page is the number of nested levels that exist.
- Added two tests validating that specific pieces of `TagHelperExecutionContext` are updated as expected.

#674
2016-02-19 10:37:01 -08:00
Caleb Nelton b03d3aa56f Code Cleanup
Use var
Conditional can be simplified
Redundant array creation expression
Parameter name differs in base declaration
Empty statement is redundant
2016-02-18 12:04:32 -08:00
hexelium a0164b005d (#346) Fixed case when razor fails to recognize escape shortcut when the first character in a text is `:`. For example @::sometext. 2016-02-15 20:51:43 +02:00
N. Taylor Mullen 6bad1bba5b Enable Razor templates inside of sections.
- Changed the variable used to render templates (`HelperResult`s) so they can be used inside of sections.
- Updated section test file to showcase nested scenario. Also Regenerated existing test files.

#572
2016-02-11 12:01:34 -08:00
N. Taylor Mullen b7b3273fa4 Lazily initialize `TagHelperAttributeList`s.
- Not all `TagHelper`s have unbound HTML attributes or any attributes at all. A great example of this is MVC's input `TagHelper` which usually takes the format of `<input asp-for="..." />`. By lazily initializing we don't build extra attribute lists where not needed.
- Moved `TagHelperContext` and `TagHelperOutput` creation to CreateX methods on `TagHelperExecutionContext`.

#604
2016-02-10 11:15:54 -08:00
Kiran Challa 84ac19571c Enable tests to run using dotnet xunit runner 2016-02-10 00:20:35 -08:00
N. Taylor Mullen fc99082ea8 Make `TagHelperAttribute` immutable.
- Remove a lot of the ugly generic work done in `TagHelperAttributeList`/`ReadOnlyTagHelperAttributeList`.
- Removed error cases where we'd check on addition of `TagHelperAttribute`s that their `name` was not `null`. This was due to the pre-existing `string` indexer for `TagHelperAttributeList`. It no longer sets `TagHelperAttribute`s directly, instead it's `[key] = value` (instead of `[key] = new TagHelperAttribute(...))`.
- Updated tests to account for new immutability/string indexer format.
- Removed copy ctor from `TagHelperAttribute` since its immutability kills the value.
- Changed `ReadOnlyTagHelperAttributeList` to inherit from `ReadOnlyCollection`

#604
2016-02-04 16:38:30 -08:00
Ajay Bhargav Baaskaran 49c553ec7b Updated Json.Net version 2016-02-04 16:13:22 -08:00
N. Taylor Mullen 4418a5527d Up imports to net451. 2016-02-01 15:50:28 -08:00
N. Taylor Mullen ffa63cb71f Fix test projects. 2016-02-01 15:41:02 -08:00
N. Taylor Mullen c01d90900e Don't transitively depend on `Newtonsoft.Json`. 2016-01-29 10:23:15 -08:00
N. Taylor Mullen 662e6e6dbe Fix build break 2016-01-28 13:50:21 -08:00
Ryan Nowak 18909506e1 Flatten TagHelperOutput when writing
This change 'flattens' a TagHelperOutput when writing it out to an
HtmlTextWriter. This is a beneficial perf change because more often than
not the thing being written to is a ViewBuffer in Razor, which uses pooled
memory. This allows us to 'join' islands of pooled ViewBuffer memory back
into the main buffer instead of keeping them wrapped up in a
TagHelperOutput or TagHelperContent.
2016-01-25 17:32:18 -08:00
N. Taylor Mullen 2e7e1f9c85 Fix design time line mapping test. 2016-01-25 17:30:21 -08:00
N. Taylor Mullen 173886bf6c Update ASP.NET 5 versions for ASP.NET Core.
See https://github.com/aspnet/Announcements/issues/144 for more information.
2016-01-22 12:28:16 -08:00
N. Taylor Mullen 3968eded19 Rename AspNet 5 file contents.
See https://github.com/aspnet/Announcements/issues/144 for more information.
2016-01-22 12:21:25 -08:00
N. Taylor Mullen 3542ec3167 Rename AspNet 5 folders and files.
See https://github.com/aspnet/Announcements/issues/144 for more information.
2016-01-22 12:21:05 -08:00