Commit Graph

310 Commits

Author SHA1 Message Date
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
Doug Bunting 37850b5d85 Add `TagHelperOutput.GetChildContentAsync()` overloads including an `HtmlEncoder`
- #643 part 1
- change is viral and requires an update to `RazorPage.StartTagHelperWritingScope()`
  - memoize `GetChildContentAsync()` per-encoder
  - update generation tests to match and to test new behaviour
- note `HtmlEncoder`s used elsewhere e.g. in other `RazorPage` instances are unaffected

Add `NullHtmlEncoder`

Nits:
- generally clean up affected doc comments and make them more consistent
- remove unused `using`s in files I had open
2016-01-17 22:34:19 -08:00
Ryan Nowak e68c55ab41 Rewrite of tokenizers 2016-01-15 15:58:27 -08:00
N. Taylor Mullen 1ce9180a3e Prevent unneeded allocations of `Block` children enumerators.
#635
2016-01-15 15:47:35 -08:00
Ryan Nowak ffdf5d2827 Remove allocations from lookahead
This makes lookahead allocation-free, saving about 15MB in our current
benchmark.
2016-01-14 17:19:13 -08:00
Ryan Nowak 6a4a9544a1 Eliminate extra List<RazorError> copies
Changing to IReadOnlyList since we always want to support indexing.
Replacing ToArray() with non-linq when needed, and with a static
EmptyArray when not needed.

Eliminates 50mb of list copies.
2016-01-14 14:54:47 -08:00
Pranav K 9c6e5f714a Updating to use Dotnet-Cli build 2016-01-12 14:53:10 -08:00
Pranav K b4d631e2f6 Removing ITypeInfo and related types 2016-01-11 17:45:18 -08:00
Pranav K c05551e167 Removing Microsoft.AspNet.Razor.Runtime.Precompilation 2016-01-11 16:33:22 -08:00
N. Taylor Mullen 605dceea02 Change string rendering to be chunked.
- Roslyn currently has an issue where too large of strings result in out of memory exceptions at compile time. To combat this I broke down literal strings into 1024 length pieces each resulting in their own `WriteLiteral`/`WriteLiteralTo` calls. The 1024 number corresponds directly with MVCs response string buffer.
- Added tests to validate large string rendering.

#614
2016-01-06 16:21:32 -08:00
Pranav K 37eca627dd Rename TagHelperContent.Append(IHtmlContent` overload to be `TagHelperContent.AppendHtml(IHtmlContent)`
Fixes #634
2015-12-31 11:26:21 -08:00
Pranav K e1aa888165 Allow optional quotes around tag helper directives
Fixes #636
2015-12-29 12:32:23 -08:00
Pranav K 77b74b0c96 Modify TryGetAttributes to return a IReadOnlyList 2015-12-28 13:12:39 -08:00
N. Taylor Mullen dbe4ce06f2 Cache XML file information when creating design time based `TagHelperDescriptor`s.
- Prior to this change we'd hit the disk every time we'd create a `TagHelperDesignTimeDescriptor` to locate an assemblies XML files.
- Did not want to tie the XML cache to a static member in-case a user updates their XML information between parses. Therefore, changed `TagHelperDescriptorFactory` and `TagHelperDesignTimeDescriptorFactory` to no longer be static.
- Put the same `TagHeleprDescriptorFactory` extensibility point as we had for its counterpart `TagHelperTypeResolver` to stay consistent. This involved making `CreateDescriptors` virtual and allowing it to be provided in the `TagHelperDescriptorResolver` constructor.

#630
2015-12-17 11:12:19 -08:00
N. Taylor Mullen 392871beb6 Change missing section end brace error to work at EOF.
- Updated existing tests and added a new case to understand `@section {....` scenarios.
- Instead of trying to guess 1 character prior to EOF decided to log error on opening brace since we know its position. Updated error to account for change in location.

#625
2015-12-11 15:10:53 -08:00
Pranav K c7a6c099ed Removing more unused usings 2015-12-08 09:54:32 -08:00
Pranav K 2a301691db Updating tests to use moq.netcore 2015-11-23 12:15:26 -08:00
N. Taylor Mullen 6b43ebc88b Update code generation tests to account for new `TagHelperOutput`.
- Add `TagHelperOutput` unit tests.

#358
2015-11-19 16:32:08 -08:00
N. Taylor Mullen bdf869c3d5 Make `TagHelperOutput` an `IHtmlContent`.
- This allows users to write `TagHelperOutput` directly to an `IHtmlContent` accepting `TextWriter`.
- This also enables us to inspect backing fields for all of the various contents to lazily initialize them.

#358
2015-11-19 16:32:03 -08:00
Ryan Nowak 42acfe43ad Fix aspnet/Mvc#3196 Razor Compilation Allocations
This change significantly reduces the amount of string and List<ISymbol>
allocations that occur during compilation by changing the way
LiteralChunks are combined.

This is a low impact fix that addresses the performance issue, the design
issues that caused it still exist.

The problem here lies in what Razor fundamentally does - it parses HTML/C#
into tokens, and then combines them back into 'chunks' a representation
friendly to code generation. When presenting with a large block of static
HTML, Razor parses it into individual HTML tokens, and then tries to join
them in back into a single chunk for rendering. Due to details of Razor's
representation of chunks/tokens, the process of combining literals is too
expensive.

Mainly, what's done here is to not try to combine instances of
LiteralChunk. The process of merging them is too expensive and requires
lots of interm List<ISymbol> and string allocations.

Instead we produce a new 'chunk' ParentLiteralChunk, which doesn't do so
much up-front computing. Various pieces of the code that deal with
LiteralChunk need to be updated to deal with ParentLiteralChunk also,
which is the bulk of the changes here.

Note that we still have the potential for LOH allocations to occur during
codegen, but it's likely to occur O(1) for each large block of HTML
instead of O(N) as it did in the old code.
2015-11-18 12:51:11 -08:00
Ryan Nowak 5ce8740f70 Simplify ChunkTreeBuilder 2015-11-18 09:43:11 -08:00
N. Taylor Mullen 53dc4d73a4 Remove System beta tag in project.json for coreclr packages. 2015-11-12 12:23:22 -08:00
Pavel Krymets 7b248a7789 Make Compilation Abstractions naming consistent with Platform Abstractions 2015-11-06 16:18:45 -08:00
N. Taylor Mullen 0c95315500 Update tests to not require quotes for TH directives.
- Updated .cshtml files to not provide quotes for the various `TagHelper` directives.
- Updated `TagHelper` directive parsing tests. This also involved removing several tests that expected errors which no longer occur since we don't have to ensure quotes are balanced.
- Updated line mappings which significantly changed due to us no longer generating line pragmas at design time for `TagHelper` directives.

#561
2015-11-06 12:19:40 -08:00
N. Taylor Mullen 02d6b00d8f Generate `async` lambda for template attributes.
- Template attributes should be of type `Func<TextWriter, Task>`. We weren't generating an `async` lambda for attributes prior to this change resulting in a compilation failure when used at runtime and the inability to `@await` code (unless a user returns some sort of `Task`).
- Updated code generation files to reflect the new code generation behavior.

#594
2015-11-04 16:04:29 -08:00
Pavel Krymets 024c673bfa Rename Microsoft.Dnx.Compilation.Abstractions to Microsoft.Extensions.Compilation.Abstractions 2015-11-03 12:56:26 -08:00
Cesar Blum Silveira b329650a33 Merge branch 'release' into dev 2015-11-02 15:10:15 -08:00
Cesar Blum Silveira 7156de5a57 Strong name everything. 2015-11-02 14:56:23 -08:00
Chris R 99901ed4fe React to HtmlEncoder type changes. 2015-10-30 10:49:35 -07:00
N. Taylor Mullen a76f16cda8 Removed `TagHelper` infrastructure `using` statements.
- The using statements had a chance to conflict with user code. Removed them and changed the default configured type names to be `global::` full name based.
- Updated test file `TagHelperDescriptor.TypeName`s to have namespaces to make them easier to read.

#580
2015-10-29 16:23:38 -07:00
Pavel Krymets e4d1259da5 Remove usage of CallContextLocator 2015-10-29 12:06:12 -07:00
N. Taylor Mullen 22ecf85f88 Added `TagHelper` support for `enum`s.
- If a `TagHelper` attribute is an `enum` then you no longer need to provide the `enum` name. To override this functionality you can add the `@` symbol.
- Added code generation tests.
- Added `TagHelperDescriptorFactoryTest`s that double for Precompilation tests.

#196
2015-10-29 10:04:07 -07:00
Pavel Krymets 42d41a0049 Rename Microsoft.Runtime.Abstractions to Microsoft.Extensions.PlatformAbstractions 2015-10-22 18:43:18 -07:00
Doug Bunting 117bbe7f65 Rename `AppendEncoded()` to `AppendHtml()` and `SetContentEncoded()` to `SetHtmlContent()`
- aspnet/Mvc#3225, 2 of 3
- also correct parameter names
2015-10-22 16:49:37 -07:00
N. Taylor Mullen 6a7082d89e Move `DefaultTagHelperContent` from `Razor.Runtime.TagHelpers` to `Razor.TagHelpers`.
#578
2015-10-22 15:23:23 -07:00
N. Taylor Mullen 6d0b268440 Add `Init` method to `TagHelper`s.
- The init method allows multiple `TagHelper`s to inject data into the `context.Items` bag to properly function when running in unison with other `TagHelper`s that need to communicate with children.
- Transition `GetChildContentAsync` from `TagHelperContext` to `TagHelperOutput`.
- Move `TagHelperContext.GetChildContentAsync` tests to `TagHelperOutputTest`.
- Added `Init` test to ensure `TagHelperRunner` calls it in the correct order.

#571
2015-10-22 15:10:08 -07:00
N. Taylor Mullen b1ad14fd46 Rename `Microsoft.AspNet.Razor.Runtime.TagHelpers`.
- Changed non-user facing type names to `Microsoft.AspNet.Razor.TagHelpers`.
- Updated folder structure to reflect new namespaces.
- Updated generated code files to reflect new runtime type namespaces.

#578
2015-10-22 10:45:43 -07:00
N. Taylor Mullen bd2a98e5ec Rename `Microsoft.AspNet.Razor.TagHelpers`.
- Name changed to `Microsoft.AspNet.Razor.Compilation.TagHelpers`.
- Changed folder locations to reflect namespace change.

#578
2015-10-22 10:25:19 -07:00
N. Taylor Mullen deaf2dc828 Enable `TagHelper`s to properly flatten to enable partial parsing.
- `TagHelper`s used to not flatten correctly resulting in inconsistent start locations for `SyntaxTreeNode`s following/within `TagHelper`s.
- This change indirectly corrected bad indentation that existed in generated C#.
- Added a test to validate `TreesAreDifferent` returns expected behavior when modifying content inside of `TagHelper`.
- Added `TagHelperBlock` `Flatten` test.

#553
2015-10-16 15:57:37 -07:00
N. Taylor Mullen 2d4092ca32 Add line pragmas to dynamic attributes.
- This enables debugging and proper error reporting for dynamic attributes. Without the pragmas errors would showcase generated Razor C# instead of their corresponding .cshtml files.
- Did not have to do any `TagHelper` specific changes since they utilize the same core attribute rendering logic.
- Updated generated C# files for tests.

#569
2015-10-16 09:41:12 -07:00
N. Taylor Mullen ed617d17e9 Remove linemappings file. 2015-10-15 15:20:57 -07:00
Pranav K 11af72a9c6 Renaming Microsoft.Framework.* -> Microsoft.Extensions.* 2015-10-03 15:44:39 -07:00