internal static void WriteDebugTree(string sourceFile, Block document, PartialParseResult result, TextChange change, RazorEditorParser parser, bool treeStructureChanged) { if (!OutputDebuggingEnabled) { return; } RunTask(() => { string outputFileName = Normalize(sourceFile) + "_tree"; string outputPath = Path.Combine(Path.GetDirectoryName(sourceFile), outputFileName); var treeBuilder = new StringBuilder(); WriteTree(document, treeBuilder); treeBuilder.AppendLine(); treeBuilder.AppendFormat(CultureInfo.CurrentCulture, "Last Change: {0}", change); treeBuilder.AppendLine(); treeBuilder.AppendFormat(CultureInfo.CurrentCulture, "Normalized To: {0}", change.Normalize()); treeBuilder.AppendLine(); treeBuilder.AppendFormat(CultureInfo.CurrentCulture, "Partial Parse Result: {0}", result); treeBuilder.AppendLine(); if (result.HasFlag(PartialParseResult.Rejected)) { treeBuilder.AppendFormat(CultureInfo.CurrentCulture, "Tree Structure Changed: {0}", treeStructureChanged); treeBuilder.AppendLine(); } if (result.HasFlag(PartialParseResult.AutoCompleteBlock)) { treeBuilder.AppendFormat(CultureInfo.CurrentCulture, "Auto Complete Insert String: \"{0}\"", parser.GetAutoCompleteString()); treeBuilder.AppendLine(); } File.WriteAllText(outputPath, treeBuilder.ToString()); }); }
public virtual EditResult ApplyChange(Span target, TextChange change, bool force) { PartialParseResult result = PartialParseResult.Accepted; TextChange normalized = change.Normalize(); if (!force) { result = CanAcceptChange(target, normalized); } // If the change is accepted then apply the change if (result.HasFlag(PartialParseResult.Accepted)) { return new EditResult(result, UpdateSpan(target, normalized)); } return new EditResult(result, new SpanBuilder(target)); }
public void NormalizeDoesntAffectShrinkingReplacements() { // Arrange var newBuffer = new StringTextBuffer("D"); var oldBuffer = new StringTextBuffer("DateTime"); var original = new TextChange(0, 8, oldBuffer, 1, newBuffer); // Act TextChange normalized = original.Normalize(); // Assert Assert.Equal(original, normalized); }
public void NormalizeDoesntAffectChangesWithoutCommonPrefixes() { // Arrange var newBuffer = new StringTextBuffer("DateTime."); var oldBuffer = new StringTextBuffer("Date."); var original = new TextChange(0, 5, oldBuffer, 9, newBuffer); // Act TextChange normalized = original.Normalize(); // Assert Assert.Equal(original, normalized); }
public void NormalizeFixesUpIntelliSenseStyleReplacements() { // Arrange var newBuffer = new StringTextBuffer("Date."); var oldBuffer = new StringTextBuffer("Date"); var original = new TextChange(0, 4, oldBuffer, 5, newBuffer); // Act TextChange normalized = original.Normalize(); // Assert Assert.Equal(new TextChange(4, 0, oldBuffer, 1, newBuffer), normalized); }
/// <summary> /// Applies the specified change to this span, optionally forcing it to accept it /// </summary> /// <param name="force">If true, no evaluation is performed, the content of the span is simply updated based on the change</param> /// <remarks> /// If this method returns a value with the PartialParseResults.Accepted flag, the change has been applied to the span. /// If force was specified, this does not indicate that the partial parsing was successful, only that the Span now reflects the applied change. /// </remarks> /// <returns>true if the change was successfully applied, false if it wasn't</returns> public PartialParseResult ApplyChange(TextChange change, bool force) { PartialParseResult result = PartialParseResult.Accepted; TextChange normalized = change.Normalize(); if (!force) { result = CanAcceptChange(normalized); } // If the change is accepted then apply the change if (result.HasFlag(PartialParseResult.Accepted)) { UpdateContent(normalized); } return result; }