Skip to content

Add new MissingTryBlock rule#2179

Open
iRon7 wants to merge 8 commits intoPowerShell:mainfrom
iRon7:#2098MissingTryBlock
Open

Add new MissingTryBlock rule#2179
iRon7 wants to merge 8 commits intoPowerShell:mainfrom
iRon7:#2098MissingTryBlock

Conversation

@iRon7
Copy link
Copy Markdown

@iRon7 iRon7 commented Apr 22, 2026

PR Summary

Although #2098 didn't get an up-for-graps label, I did create the suggested Add new MissingTryBlock rule to warn when catch or finally blocks are not preceded by a try block because:

  • I think that a catch block that misses a try block is less valid than a try block that misses a catch block which causes an parse error by the engine
    • and therefore even deserves the severity Error
  • A missing try block might easily get unnoticed during design time but will very likely fail during runtime
  • It happened twice now that someone in our company tried to publish a script that was missing a try block

PR Checklist

@iRon7 iRon7 changed the title #2098 Add new MissingTryBlock rule Add new MissingTryBlock rule Apr 22, 2026
@liamjpeters
Copy link
Copy Markdown
Contributor

👋

This rule has a severity of Warning but is emitting a diagnostic of Error severity. Where this is the only diagnostic that your rule emits, these should match. I would suggest Warning - just because it's not the 99% use-case, doesn't mean I can't define a function called catch and have it accept a ScriptBlock if I wanted to.

This has the same copy-pasta as your other PR.

@iRon7 iRon7 changed the title Add new MissingTryBlock rule WIP: Add new MissingTryBlock rule Apr 28, 2026
…in the rule definition and resolved copy-pasta in the rule description.

Co-authored-by: Copilot <copilot@github.com>
Copilot AI review requested due to automatic review settings April 29, 2026 14:49
@iRon7 iRon7 changed the title WIP: Add new MissingTryBlock rule Add new MissingTryBlock rule Apr 29, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new built-in PSScriptAnalyzer rule to detect catch/finally blocks used without a preceding try, with accompanying documentation and Pester tests to validate behavior.

Changes:

  • Introduces the new MissingTryBlock built-in rule implementation and localized strings.
  • Adds rule documentation and registers it in the rules documentation index.
  • Adds a dedicated Pester test suite for violation, compliant, and suppression scenarios.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
docs/Rules/README.md Adds MissingTryBlock to the published rules index table.
docs/Rules/MissingTryBlock.md New rule documentation page describing intent, guidance, and examples.
Tests/Rules/MissingTryBlock.tests.ps1 New Pester coverage for violations, compliant cases, and suppression behavior.
Rules/Strings.resx Adds name/common-name/description/error message resources for the new rule.
Rules/MissingTryBlock.cs Implements AST-based detection and emits diagnostics for missing try before catch/finally.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread Tests/Rules/MissingTryBlock.tests.ps1
Comment thread docs/Rules/MissingTryBlock.md Outdated
Comment thread Rules/Strings.resx Outdated
Comment thread Rules/MissingTryBlock.cs Outdated
Comment thread Rules/MissingTryBlock.cs
Comment thread Rules/MissingTryBlock.cs Outdated
iRon7 and others added 5 commits April 29, 2026 17:37
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants