private (SyntaxTriviaList trailingTrivia, SyntaxTriviaList leadingTrivia) GetTrailingAndLeadingTrivia( KeyValuePair <ValueTuple <SyntaxToken, SyntaxToken>, TriviaData> pair, CancellationToken cancellationToken) { if (pair.Key.Item1.RawKind == 0) { return(default(SyntaxTriviaList), GetLeadingTriviaAtBeginningOfTree(pair.Key, pair.Value, cancellationToken)); } if (pair.Value is TriviaDataWithList csharpTriviaData) { var triviaList = csharpTriviaData.GetTriviaList(cancellationToken); var index = GetFirstEndOfLineIndexOrRightBeforeComment(triviaList); return(TriviaHelpers.CreateTriviaListFromTo(triviaList, 0, index), TriviaHelpers.CreateTriviaListFromTo(triviaList, index + 1, triviaList.Count - 1)); } // whitespace trivia case such as spaces/tabs/new lines // these will always have a single text change var text = pair.Value.GetTextChanges(GetTextSpan(pair.Key)).Single().NewText ?? ""; var trailingTrivia = SyntaxFactory.ParseTrailingTrivia(text); var width = trailingTrivia.GetFullWidth(); var leadingTrivia = SyntaxFactory.ParseLeadingTrivia(text.Substring(width)); return(trailingTrivia, leadingTrivia); }
public static void RegisterTriviaCommand(this DiscordClient client, IConfiguration config) { Console.WriteLine("Registering 'Trivia'..."); client.GetService <CommandService>().CreateCommand("trivia") .AddCheck((c, u, ch) => ch.Id == UInt64.Parse(config["PrivChat"])) .Parameter("rounds", ParameterType.Required) .Description("Would you like to play a game?") .Do(async cea => { if (!TriviaHelpers.Questions.Any()) { TriviaHelpers.InitQuestions(config); } if (client.GetTrivias().Any(t => t.Channel.Id == cea.Channel.Id)) { await cea.Channel.SendMessage($"Trivia already running."); return; } int rounds; if (int.TryParse(cea.Args[0], out rounds)) { if (rounds > TriviaHelpers.Questions.Count) { await cea.Channel.SendMessage($"Could not start trivia, too many questions specified."); } else { var trivia = new Trivia(client, rounds, cea.Channel, config); client.GetTrivias().Add(trivia); trivia.StartTrivia(); } } else { await cea.Channel.SendMessage($"Could not start trivia, parameter was not a number."); } }); }