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…
	
	Add table
		Add a link
		
	
		Reference in a new issue