diff --git a/users/wpcarro/website/blog/posts.nix b/users/wpcarro/website/blog/posts.nix index 5a58c9309..b9345a5ca 100644 --- a/users/wpcarro/website/blog/posts.nix +++ b/users/wpcarro/website/blog/posts.nix @@ -29,4 +29,11 @@ content = ./posts/auto-reboot-nixos.md; draft = false; } + { + key = "csharp-unused-variables"; + title = "Unused Variables Broke Prod"; + date = 1655840877; + content = ./posts/csharp-unused-variables.md; + draft = false; + } ] diff --git a/users/wpcarro/website/blog/posts/csharp-unused-variables.md b/users/wpcarro/website/blog/posts/csharp-unused-variables.md new file mode 100644 index 000000000..0d26a86cc --- /dev/null +++ b/users/wpcarro/website/blog/posts/csharp-unused-variables.md @@ -0,0 +1,40 @@ +# Unused Variables Broke Prod + +**Problem**: This morning we broke production because (believe it or not) an +unused variable went undetected. + +**Solution**: Consume the variable in the relevant codepath. + +**Further AI**: Treat unused variables as errors (which will block CI). + +## Warning/Disclaimer + +I am not a C# programmer. I know close to nothing about C#. But at `$WORK`, one +of our codebases is written in C#, so occasionally I interface with it. + +## Treating Unused Variables as Errors + +C# uses `.csproj` files to configure projects. The following changes to our +`.csproj` file WAI'd: + +```diff ++ ++ IDE0059 ++ true +``` + +However, supporting this turned out to be a ~1h adventure... Why was this +unexpectedly difficult? As it turns out, there are the 3x promising compiler +warnings that I had to discover/try: + +- `CS0219`: doesn't WAI (see "Note" here: https://docs.microsoft.com/en-us/dotnet/csharp/misc/cs0219) +- `CA1804`: silently unsupported (replaced by `IDE0059`) +- `IDE0059`: WAIs + +Legend: +- `CS`: stands for C# +- `CA`: stands for Code Analysis (I *think* a Visual Studio concept) +- `IDE`: stands for IDE (I think *also* a Visual Studio concept) + +For `CA` and `IDE` prefixed warnings, `EnforceCodeStyleInBuild` must also be +enabled.