PowerShell script to report catch blocks
This script will look for catch statements and report a specified number of
lines following each catch. It's a little crude — it prints a fixed
number of lines rather than parsing the code well enough to pull out the entire catch block
— but it is good enough for code reviews. If there's a problem, a few lines is usually
plenty to spot it. In fact, having less code to look at may help spot problems.
See this blog post: Reviewing catch blocks.
# If path is not provided as an argument,
# the script searches the current directory.
param($srcRoot=(pwd))
# Make an array of file names in the directory
# containing C# or C++ code
$ext = "\.(cs|cpp|h)$"
$files = (dir -recurse $srcRoot | %{$_.FullName}) -match $ext
# number of lines to print after a catch block
$contextLines = 5
# $contextLines is a guard.
# Initialize $context to any value great than $contextLines
$context = $contextLines + 1
# Process each file
foreach ($file in $files)
{
$allLines = (get-content $file)
$linesToKeep = @()
$lineNumber = 0
# Process each line in a file
foreach ($line in $allLines)
{
$lineNumber++
if ($line -match "catch\s*\(")
{
$linesToKeep += "`nLine $lineNumber"
$context = 0
}
if ($context -le $contextLines)
{
$linesToKeep += $line
$context++
}
}
# Print report of catch blocks
if ($linesToKeep.Length -gt 0)
{
$file
" "
$linesToKeep
"___________________________________________"
" "
}
}