Skip to content

Instantly share code, notes, and snippets.

Thomas Levesque thomaslevesque

Block or report user

Report or block thomaslevesque

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
thomaslevesque / TestNullable.cs
Created Jun 5, 2020
Repro for CS8762 false positive
View TestNullable.cs
using System.Diagnostics.CodeAnalysis;
namespace TestNullable
class Test
static bool TrySomething1(string s, [NotNullWhen(false)] out string? failReason)
// warning CS8762: Parameter 'failReason' must have a non-null value when exiting with 'false'.
return s.Length % 2 == 0
thomaslevesque / gist:274766d874ebf1769c48a203786725f3
Created Jul 24, 2018
Regex to fix SwaggerResponse attributes after migration to Swashbuckle 3.0.0
View gist:274766d874ebf1769c48a203786725f3
Pattern: \[SwaggerResponse\((?<code>\d+), (?<type>typeof\([A-Za-z\.\<\>]+\)), (?<desc>\"[^\"]+\")\)\]
Replacement: [SwaggerResponse(${code}, ${desc}, ${type})]
thomaslevesque / additional.css
Created Aug 26, 2017
Additional CSS for wide-screen Twenty Fourteen Wordpress theme
View additional.css
pre {
padding: 0;
border: none;
article h3 {
font-size: 20px;
code {
thomaslevesque /
Last active Apr 23, 2020
All C# errors and warnings. Generated by the code in this repo: Last updated 2019/06/14, Roslyn commit d5b8d64b4d840b26c947abd2a00b1070cbee55f0.

All C# errors and warnings

Parsed from the Roslyn source code using Roslyn.

Code Severity Message
CS0006 Error Metadata file '{0}' could not be found
CS0009 Fatal Metadata file '{0}' could not be opened -- {1}
CS0012 Error The type '{0}' is defined in an assembly that is not referenced. You must add a reference to assembly '{1}'.
CS0016 Error Could not write to output file '{0}' -- '{1}'
thomaslevesque / CSharpErrorCodes.cs
Created May 10, 2017
Generate "warnings as errors" ruleset from error code definitions in Roslyn source code
View CSharpErrorCodes.cs
void Main()
string errorCodesFileUrl = "";
string errorCodesFileContent = new WebClient().DownloadString(errorCodesFileUrl);
var syntaxTree = CSharpSyntaxTree.ParseText(errorCodesFileContent);
var root = syntaxTree.GetRoot();
var enumDeclaration =
.First(e => e.Identifier.ValueText == "ErrorCode");
thomaslevesque / ParseAuthChallenge.cs
Created Feb 23, 2017
Parsing HTTP authentication challenge with Sprache
View ParseAuthChallenge.cs
void Main()
ParseAndPrintChallenge(@"Bearer realm=""FooCorp"", error=invalid_token, error_description=""The access token has expired""");
void ParseAndPrintChallenge(string input)
var challenge = Grammar.Challenge.Parse(input);
Console.WriteLine($"Scheme: {challenge.Scheme}");

Keybase proof

I hereby claim:

  • I am thomaslevesque on github.
  • I am thomaslevesque ( on keybase.
  • I have a public key whose fingerprint is 32C8 E72A EC90 6E8B 79BF 36C3 7AF5 E7A4 FE44 396B

To claim this, I am signing this object:

thomaslevesque / FakeConfigurator.cs
Created Jun 9, 2016
Adapter to ease the migration from FakeItEasy 1.x to 2.0.0, to avoid modifying existing fake configurators.
View FakeConfigurator.cs
using FakeItEasy;
using FakeItEasy.Creation;
namespace TestUtilies
public abstract class FakeConfigurator<T> : FakeOptionsBuilder<T>
protected override void BuildOptions(IFakeOptions<T> options)
thomaslevesque / GitHubMarkdownShortcuts.user.js
Last active Feb 3, 2016
Keyboard shortcuts for GitHub markdown editor
View GitHubMarkdownShortcuts.user.js
// ==UserScript==
// @name GitHub Markdown shortcuts
// @namespace ThomasLevesque
// @include*
// @include*
// @version 1
// @grant none
// ==/UserScript==
View gist:e1ccd9cef0a47e609a46
└─┬ aglio@2.2.0
├─┬ aglio-theme-olio@1.6.2
│ ├── coffee-script@1.10.0
│ ├── highlight.js@8.9.1
│ ├─┬ jade@1.11.0
│ │ ├── character-parser@1.2.1
│ │ ├─┬ clean-css@3.4.9
│ │ │ └─┬ commander@2.8.1
│ │ │ └── graceful-readlink@1.0.1
│ │ ├── commander@2.6.0
You can’t perform that action at this time.