public Task ExecuteAsync(AsyncData data, WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken) { var first = data.GetFirst(); var firstByte = first.Array[first.Offset]; if (firstByte == (byte)'I') { var infoItemIndex = FastConvert.Utf8ByteArrayToInt32(first.Skip(1)); return(_completion.SendItemInfoAsync(infoItemIndex, session, sender, cancellationToken)); } if (firstByte == (byte)'X') { return(_completion.CancelCompletionAsync(session, sender, cancellationToken)); } if (firstByte == (byte)'F') { return(_completion.ForceCompletionAsync(session, sender, cancellationToken)); } var itemIndex = FastConvert.Utf8ByteArrayToInt32(first); return(_completion.SelectCompletionAsync(itemIndex, session, sender, cancellationToken)); }
public async Task ExecuteAsync(AsyncData data, WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken) { var roslynSession = session.Roslyn; var actionId = FastConvert.Utf8ByteArrayToInt32(data.GetFirst()); var action = roslynSession.CurrentCodeActions[actionId]; var operations = await action.GetOperationsAsync(cancellationToken).ConfigureAwait(false); foreach (var operation in operations) { operation.Apply(roslynSession.Workspace, cancellationToken); } // I rollback the changes since I want to send them to client and get them back as ReplaceText // This makes sure any other typing on client merges with these changes properly var changes = await roslynSession.RollbackWorkspaceChangesAsync().ConfigureAwait(false); var writer = sender.StartJsonMessage("changes"); writer.WriteProperty("reason", "fix"); writer.WritePropertyStartArray("changes"); foreach (var change in changes) { writer.WriteChange(change); } writer.WriteEndArray(); await sender.SendJsonMessageAsync(cancellationToken).ConfigureAwait(false); }
public void StringToGuidPerf() { FillGuidSampleCache(); var t = new Stopwatch(); t.Restart(); for (int i = 0; i < PERF_SAMPLE_SIZE; i++) { FastConvert.ToGuid(_guidSampleStringCache[i]); } t.Stop(); TimeSpan fastConvertPerf = t.Elapsed; output.WriteLine("[TOUT/PERF] FastConvert_ToGuid: {0}", fastConvertPerf); t.Restart(); for (int i = 0; i < PERF_SAMPLE_SIZE; i++) { Guid.Parse(_guidSampleStringCache[i]); } t.Stop(); TimeSpan guidParsePerf = t.Elapsed; output.WriteLine("[TOUT/PERF] Guid_Parse: {0}", guidParsePerf); output.WriteLine("[TOUT/PERF] " + ToFriendlyPerfResult(fastConvertPerf.Ticks, guidParsePerf.Ticks).Replace("{#me}", "FastConvert.ToGuid").Replace("{#ref}", "Guid.Parse")); }
public Task ExecuteAsync(AsyncData data, WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken) { var cursorPosition = FastConvert.Utf8ByteArrayToInt32(data.GetFirst()); session.CursorPosition = cursorPosition; return(_signatureHelp.ApplyCursorPositionChangeAsync(session, sender, cancellationToken)); }
public Task ExecuteAsync(AsyncData data, WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken) { var @char = FastConvert.Utf8ByteArrayToChar(data.GetFirst()); session.ReplaceText(FastConvert.CharToString(@char), session.CursorPosition, 0); session.CursorPosition += 1; return(_effects.ApplyTypedCharAsync(@char, session, sender, cancellationToken)); }
public async Task ExecuteAsync(AsyncData data, WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken) { var first = data.GetFirst(); var endOffset = first.Offset + first.Count - 1; var partStart = first.Offset; int? start = null; int? length = null; int? cursorPosition = null; string?reason = null; for (var i = first.Offset; i <= endOffset; i++) { if (first.Array[i] != (byte)':') { continue; } var part = new ArraySegment <byte>(first.Array, partStart, i - partStart); if (start == null) { start = FastConvert.Utf8ByteArrayToInt32(part); partStart = i + 1; continue; } if (length == null) { length = FastConvert.Utf8ByteArrayToInt32(part); partStart = i + 1; continue; } if (cursorPosition == null) { cursorPosition = FastConvert.Utf8ByteArrayToInt32(part); partStart = i + 1; continue; } reason = part.Count > 0 ? Encoding.UTF8.GetString(part) : string.Empty; partStart = i + 1; break; } if (start == null || length == null || cursorPosition == null || reason == null) { throw new FormatException("Command arguments must be 'start:length:cursor:reason:text'."); } var text = await AsyncDataConvert.ToUtf8StringAsync(data, partStart - first.Offset, _charArrayPool).ConfigureAwait(false); session.ReplaceText(text, start.Value, length.Value); session.CursorPosition = cursorPosition.Value; await _signatureHelp.ApplyCursorPositionChangeAsync(session, sender, cancellationToken).ConfigureAwait(false); await _completion.ApplyReplacedTextAsync(reason, _typedCharEffects, session, sender, cancellationToken).ConfigureAwait(false); }
public void GuidSerialization() { Guid g = Guid.NewGuid(); foreach (string c in new string[] { "d", "n", "p", "b", "x" }) { Assert.Equal(g.ToString(c), FastConvert.ToString(g, c)); } }
public void GuidDeserialization() { Guid g = Guid.NewGuid(); foreach (string c in new string[] { "d", "n", "p", "b", "x" }) { string gstr = g.ToString(c); Assert.True(Guid.Parse(gstr) == FastConvert.ToGuid(gstr, c)); } }
public Task ExecuteAsync(AsyncData data, WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken) { if (!session.IsRoslyn) { return(Task.CompletedTask); } var cursorPosition = FastConvert.Utf8ByteArrayToInt32(data.GetFirst()); return(ExecuteForRoslynAsync(cursorPosition, session, sender, cancellationToken)); }
public Task ExecuteAsync(AsyncData data, WorkSession session, ICommandResultSender sender, CancellationToken cancellationToken) { var @char = FastConvert.Utf8ByteArrayToChar(data.GetFirst()); if (@char != 'F') { // ReSharper disable once HeapView.BoxingAllocation throw new FormatException($"Unknown SignatureHelp command '{@char}'."); } return(_signatureHelp.ForceSignatureHelpAsync(session, sender, cancellationToken)); }
public void ConversionIsValid() { Guid g1 = Guid.NewGuid(); byte[] b = g1.ToByteArray(); string x = FastConvert.ToBase85String(b); byte[] y = FastConvert.FromBase85String(x); Guid g2 = new Guid(y); Assert.True(g1 == g2); }
public void ConvertInt32ToString() { FillNumberCache(); int loopCount = _intCache.Count; int i = 0; while (i < loopCount) { Assert.Equal(Convert.ToString(_intCache[i]), FastConvert.ToString(_intCache[i])); i++; } }
public void ConvertStringToInt64() { FillNumberCache(); int loopCount = _longCache.Count; int i = 0; while (i < loopCount) { Assert.Equal(_longCache[i], FastConvert.ToInt64(_longCache[i].ToString())); i++; } }
public void ConvertStringToUInt64() { FillNumberCache(); int loopCount = _longCache.Count; int i = 0; while (i < loopCount) { ulong testNum = (ulong)_longCache[i] + 9223372036854775807; Assert.Equal(testNum, FastConvert.ToUInt64(testNum.ToString())); i++; } }
public void ConvertSingleToString() { FillNumberCache(); int loopCount = _doubleCache.Count; int i = 0; while (i < loopCount) { Assert.Equal(Convert.ToString((float)_doubleCache[i]), FastConvert.ToString((float)_doubleCache[i])); i++; } }
public void ConvertStringToUInt32() { FillNumberCache(); int loopCount = _intCache.Count; int i = 0; while (i < loopCount) { uint testNum = (uint)_intCache[i] + 2147483647; Assert.Equal(testNum, FastConvert.ToUInt32(testNum.ToString())); i++; } }
public void ConvertStringToSingle() { FillNumberCache(); int loopCount = _doubleCache.Count; int i = 0; while (i < loopCount) { Assert.True( ((float)_doubleCache[i] - FastConvert.ToSingle(_doubleCache[i].ToString()) < ZeroTolerance) || (FastConvert.ToSingle(_doubleCache[i].ToString()) - (float)_doubleCache[i] < ZeroTolerance)); i++; } }
private async Task SendSlowUpdateAsync(IReadOnlyList <Diagnostic> diagnostics, WorkSession session, object extensionResult, ICommandResultSender sender, CancellationToken cancellationToken) { if (session.IsRoslyn) { session.Roslyn.CurrentCodeActions.Clear(); } var writer = sender.StartJsonMessage("slowUpdate"); writer.WritePropertyStartArray("diagnostics"); foreach (var diagnostic in diagnostics) { writer.WriteStartObject(); writer.WriteProperty("id", diagnostic.Id); writer.WriteProperty("message", diagnostic.GetMessage()); writer.WriteProperty("severity", FastConvert.EnumToLowerInvariantString(diagnostic.Severity)); writer.WritePropertyStartArray("tags"); foreach (var tag in diagnostic.Descriptor.CustomTags) { if (tag != WellKnownDiagnosticTags.Unnecessary) { continue; } writer.WriteValue(tag.ToLowerInvariant()); } writer.WriteEndArray(); writer.WritePropertyName("span"); writer.WriteSpan(diagnostic.Location.SourceSpan); var actions = await GetCodeActionsAsync(diagnostic, session, cancellationToken).ConfigureAwait(false); if (actions.Length > 0) { writer.WritePropertyStartArray("actions"); WriteActions(writer, actions, session); writer.WriteEndArray(); } writer.WriteEndObject(); } writer.WriteEndArray(); if (_extension != null) { writer.WritePropertyName("x"); _extension.WriteResult(writer, extensionResult, session); } await sender.SendJsonMessageAsync(cancellationToken).ConfigureAwait(false); }
public void GuidToStringPerf() { FillGuidSampleCache(); var t = new Stopwatch(); t.Restart(); for (int i = 0; i < PERF_SAMPLE_SIZE; i++) { FastConvert.ToString(_guidSampleCache[i]); } t.Stop(); TimeSpan fastConvertPerf = t.Elapsed; output.WriteLine("[TOUT/PERF] FastConvert_ToString: {0}", fastConvertPerf); t.Restart(); for (int i = 0; i < PERF_SAMPLE_SIZE; i++) { Convert.ToString(_guidSampleCache[i]); } t.Stop(); TimeSpan systemConvertPerf = t.Elapsed; output.WriteLine("[TOUT/PERF] Convert_ToString: {0}", systemConvertPerf); output.WriteLine("[TOUT/PERF] " + ToFriendlyPerfResult(fastConvertPerf.Ticks, systemConvertPerf.Ticks).Replace("{#me}", "FastConvert.ToString").Replace("{#ref}", "Convert.ToString")); t.Restart(); for (int i = 0; i < PERF_SAMPLE_SIZE; i++) { _guidSampleCache[i].ToString(); } t.Stop(); TimeSpan guidSelfPerf = t.Elapsed; output.WriteLine("[TOUT/PERF] Guid_ToString: {0}", guidSelfPerf); output.WriteLine("[TOUT/PERF] " + ToFriendlyPerfResult(fastConvertPerf.Ticks, guidSelfPerf.Ticks).Replace("{#me}", "FastConvert.ToString").Replace("{#ref}", "Guid.ToString")); }
private Task SendInfoTipAsync(QuickInfoItem info, ICommandResultSender sender, CancellationToken cancellationToken) { var writer = sender.StartJsonMessage("infotip"); if (IsNullOrEmpty(info)) { return(sender.SendJsonMessageAsync(cancellationToken)); } writer.WriteTagsProperty("kinds", info.Tags); writer.WritePropertyStartArray("sections"); foreach (var section in info.Sections) { writer.WriteStartObject(); writer.WriteProperty("kind", FastConvert.StringToLowerInvariantString(section.Kind)); writer.WritePropertyStartArray("parts"); writer.WriteTaggedTexts(section.TaggedParts); writer.WriteEndArray(); writer.WriteEndObject(); } writer.WriteEndArray(); writer.WriteSpanProperty("span", info.Span); return(sender.SendJsonMessageAsync(cancellationToken)); }