private static bool TopLevelChanged(SyntaxTree oldTree, SourceText oldText, SyntaxTree newTree, SourceText newText) { // ** currently, it doesn't do any text based quick check. we can add them later if current logic is not performant enough for typing case. var change = newText.GetEncompassingTextChangeRange(oldText); if (change == default) { // nothing has changed return(false); } // if texts are small enough, just use the equivalent to find out whether there was top level edits if (oldText.Length < MaxTextChangeRangeLength && newText.Length < MaxTextChangeRangeLength) { var topLevel = !newTree.IsEquivalentTo(oldTree, topLevel: true); return(topLevel); } // okay, text is not small and whole text is changed, then we always treat it as top level edit if (change.NewLength == newText.Length) { return(true); } // if changes are small enough, we use IsEquivalentTo to find out whether there was a top level edit if (change.Span.Length < MaxTextChangeRangeLength && change.NewLength < MaxTextChangeRangeLength) { var topLevel = !newTree.IsEquivalentTo(oldTree, topLevel: true); return(topLevel); } // otherwise, we always consider top level change return(true); }
private static bool TopLevelChanged(SyntaxTree oldTree, SourceText oldText, SyntaxTree newTree, SourceText newText) { // ** currently, it doesn't do any text based quick check. we can add them later if current logic is not performant enough for typing case. var change = newText.GetEncompassingTextChangeRange(oldText); if (change == default(TextChangeRange)) { // nothing has changed return false; } // if texts are small enough, just use the equivalent to find out whether there was top level edits if (oldText.Length < MaxTextChangeRangeLength && newText.Length < MaxTextChangeRangeLength) { var topLevel = !newTree.IsEquivalentTo(oldTree, topLevel: true); return topLevel; } // okay, text is not small and whole text is changed, then we always treat it as top level edit if (change.NewLength == newText.Length) { return true; } // if changes are small enough, we use IsEquivalentTo to find out whether there was a top level edit if (change.Span.Length < MaxTextChangeRangeLength && change.NewLength < MaxTextChangeRangeLength) { var topLevel = !newTree.IsEquivalentTo(oldTree, topLevel: true); return topLevel; } // otherwise, we always consider top level change return true; }