feat(wpcarro/blog): Create short post about C#
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>
This commit is contained in:
parent
46ba96544a
commit
ab1984c8ac
2 changed files with 47 additions and 0 deletions
|
@ -29,4 +29,11 @@
|
||||||
content = ./posts/auto-reboot-nixos.md;
|
content = ./posts/auto-reboot-nixos.md;
|
||||||
draft = false;
|
draft = false;
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
key = "csharp-unused-variables";
|
||||||
|
title = "Unused Variables Broke Prod";
|
||||||
|
date = 1655840877;
|
||||||
|
content = ./posts/csharp-unused-variables.md;
|
||||||
|
draft = false;
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
|
40
users/wpcarro/website/blog/posts/csharp-unused-variables.md
Normal file
40
users/wpcarro/website/blog/posts/csharp-unused-variables.md
Normal file
|
@ -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.
|
Loading…
Reference in a new issue