diff options
author | William Carroll <wpcarro@gmail.com> | 2022-06-21T19·49-0700 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2022-06-27T18·28+0000 |
commit | ab1984c8ac07fea86d1779956fd4f9ebfbb91b9e (patch) | |
tree | 39ce1908c760eb82202eda78bf9d8942f615f6bc /users/wpcarro | |
parent | 46ba96544a8e13141d3f4920bc67e35dbdbc559f (diff) |
feat(wpcarro/blog): Create short post about C# r/4263
Inspired by Profpatsch's "Notes", here's a short post about a thing that happened today... Note: I'd like a way to convert `git log --format=%b` into blog posts (maybe). Maybe some commit metadata like `POST=true` Change-Id: I492c48c81891d9f64da8c8149d0d2bfa864ed731 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5889 Tested-by: BuildkiteCI Reviewed-by: wpcarro <wpcarro@gmail.com> Autosubmit: wpcarro <wpcarro@gmail.com>
Diffstat (limited to 'users/wpcarro')
-rw-r--r-- | users/wpcarro/website/blog/posts.nix | 7 | ||||
-rw-r--r-- | users/wpcarro/website/blog/posts/csharp-unused-variables.md | 40 |
2 files changed, 47 insertions, 0 deletions
diff --git a/users/wpcarro/website/blog/posts.nix b/users/wpcarro/website/blog/posts.nix index 5a58c9309ce5..b9345a5ca141 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 000000000000..0d26a86ccafb --- /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: Remove unnecessary value assignment --> ++ <WarningsAsErrors>IDE0059</WarningsAsErrors> ++ <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild> +``` + +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. |