Pipeline Hooks Lens

A Visual Studio Code extension that helps you quickly discover pipeline hooks in backend C# projects and detect overridden files in Remix frontend projects.
It provides inline annotations, gutter icons, CodeLens integration, and hover tooltips for smooth navigation.
Features
Backend (C#)
Pipeline Hooks: Detects pipeline classes and all related hook classes (InputAlteration, Condition, Prehook, DefaultHook, Hook, etc.).
Inline Annotations: Shows the number of hooks inline next to the class definition.
Gutter Icons: Adds gutter icons for pipelines.
Hover Navigation: Provides hover navigation to related hooks.
CodeLens: Optional CodeLens for quick hook navigation.
Notification Template Validation: Detects notification classes that inherit from NotificationBase and validates that required template files exist under Client/Templates/:
{Name}.Email.body.html
{Name}.Email.subject.html
Template Diagnostics: Shows diagnostics warnings when template files are missing.
Template Decorations: Displays inline decorations indicating missing template files.
Name Expression Support: Supports various Name property expression formats (string literals, nameof expressions, constructor parameters with defaults).
Frontend (Remix)
File Overrides: Detects overridden files in app/overrides/ that match files in app/plugins/.
Override Annotations: Displays an inline annotation after the first export line.
Override Navigation: Hover provides a clickable link to the override file.
Extension Points: Detects ExtensionPoint and ReplaceIfExtension components in .tsx files within the Remix folder structure.
Extension Matching: Matches extension point names with registered extensions in .ext.tsx files.
Extension Annotations: Displays inline annotations when matching extensions are found.
Extension CodeLens: Provides clickable CodeLens links to navigate to extension implementations.
Extension Tooltips: Hover tooltips show all registered extensions for an extension point.
Admin Endpoints: Detects admin-only API endpoints (api.List, api.Create, api.Update, api.Import) in TypeScript/TSX files.
Entity Matching: Matches entity names against SQLTable classes in C# files to identify admin-only endpoints.
Admin CodeLens: Displays CodeLens annotations with "Admin-only" label for detected endpoints.
Admin Decorations: Shows inline text decorations indicating admin-only endpoints.
Admin Info: Clickable CodeLens provides information about admin permission requirements.
Settings
The extension is configurable under pipelineHooksLens.*. Settings are organized by feature area.
General
pipelineHooksLens.gutter.enabled — Enable or disable gutter icons globally.
pipelineHooksLens.gutter.fileName — Path to the gutter icon (absolute or relative).
pipelineHooksLens.text.margin — CSS margin for inline decorations.
pipelineHooksLens.codelens.enabled — Enable or disable CodeLens above pipelines (applies to backend hooks and extension points).
pipelineHooksLens.snippets.enabled — Enable or disable C# code snippets.
Backend (C#)
pipelineHooksLens.backend.enabled — Enable backend pipeline hook detection.
pipelineHooksLens.backend.hookNames — List of recognized hook suffixes. Default: ["InputAlteration", "Condition", "Prehook", "DefaultHook", "Hook"].
pipelineHooksLens.backend.message.text.singular — Message format for a single hook. Default: "← 1 Hook".
pipelineHooksLens.backend.message.text.plural — Message format for multiple hooks. Use ${count} placeholder. Default: "← ${count} Hooks".
pipelineHooksLens.backend.message.color — CSS color for backend hook messages. Default: "#2baede".
pipelineHooksLens.backend.message.fontWeight — Font weight (normal or bold) for backend hook messages. Default: "bold".
pipelineHooksLens.backend.message.fontStyle — Font style (normal or italic) for backend hook messages. Default: "normal".
pipelineHooksLens.namespace.ignoredFolders — List of folder names to ignore when generating namespaces (case-insensitive). Default: ["backend"].
Notification Templates (Backend)
pipelineHooksLens.notification.enabled — Enable notification template validation.
pipelineHooksLens.notification.diagnostics.enabled — Show diagnostic warnings for missing notification template files.
pipelineHooksLens.notification.inline.enabled — Show inline text decorations for missing notification template files.
pipelineHooksLens.notification.message.text — Custom message text displayed inline when templates are missing. Use ${missing} placeholder to show missing file types (e.g., "body", "subject", or "body & subject"). Default: "← ⚠ missing templates".
pipelineHooksLens.notification.message.color — CSS color for notification template messages. Default: "#2baede".
pipelineHooksLens.notification.message.fontWeight — Font weight (normal or bold) for notification template messages. Default: "bold".
pipelineHooksLens.notification.message.fontStyle — Font style (normal or italic) for notification template messages. Default: "normal".
Frontend (Remix)
pipelineHooksLens.frontend.enabled — Enable frontend override detection.
pipelineHooksLens.frontend.message.text — Message displayed after export line when an override is found. Default: "← ⚠️overridden⚠️".
pipelineHooksLens.frontend.message.color — CSS color for frontend override messages. Default: "#2baede".
pipelineHooksLens.frontend.message.fontWeight — Font weight (normal or bold) for frontend override messages. Default: "bold".
pipelineHooksLens.frontend.message.fontStyle — Font style (normal or italic) for frontend override messages. Default: "normal".
pipelineHooksLens.extension.message.text — Message displayed after extension point components when matching extensions are found. Default: "← Extension".
pipelineHooksLens.extension.message.color — CSS color for extension point messages. Default: "#2baede".
pipelineHooksLens.extension.message.fontWeight — Font weight (normal or bold) for extension point messages. Default: "bold".
pipelineHooksLens.extension.message.fontStyle — Font style (normal or italic) for extension point messages. Default: "normal".
pipelineHooksLens.adminEndpoint.enabled — Enable admin endpoint detection.
pipelineHooksLens.adminEndpoint.codelens.enabled — Show CodeLens annotations for admin-only endpoints.
pipelineHooksLens.adminEndpoint.inline.enabled — Show inline text decorations for admin-only endpoints.
pipelineHooksLens.adminEndpoint.message.text — Custom message text displayed inline for admin-only endpoints. Use ${entity} placeholder to show the entity name. Default: "← Admin-only".
pipelineHooksLens.adminEndpoint.message.color — CSS color for admin endpoint messages. Default: "#2baede".
pipelineHooksLens.adminEndpoint.message.fontWeight — Font weight (normal or bold) for admin endpoint messages. Default: "bold".
pipelineHooksLens.adminEndpoint.message.fontStyle — Font style (normal or italic) for admin endpoint messages. Default: "normal".
Commands
Pipeline Hooks Lens: Reload Indexes
Rebuilds both backend and frontend indexes, useful if files are moved or renamed.
Pipeline Hooks Lens: Debug Extension Points
Shows debug information about extension points found in the current file, including registered extensions and index keys.
Pipeline Hooks Lens: Check Notification Templates
Manually scans all open documents for notification classes and reports missing template files.
Snippets
This extension provides several C# code-generation snippets designed to speed up development across Phoenix projects. All snippets automatically generate the correct namespace based on the file location (Client, Core, or Plugins), and several include dynamic filename-based transformations.
pipelinetemplate
Creates a full Phoenix SerialPipeline class:
- Default
ExecuteDefaultAsync override
- Input and output DTO classes
- Dynamic naming based on filename
- Correct namespace based on folder structure
Used for creating new pipeline classes.
hooktemplate
Creates a pipeline hook class:
- Class name derived from filename
- Pipeline name derived from filename
- Generates inheritance of the form
SomeNamePipeline.Hook
- Inserts correct namespace
Example:
GetProviderTypeHook.cs → GetProviderTypePipeline.Hook
prehooktemplate
Creates a pipeline prehook class:
- Class name derived from filename
- Pipeline name derived from filename
- Generates inheritance of the form
SomeNamePipeline.Prehook
- Inserts correct namespace
Example:
GetProviderTypePrehook.cs → GetProviderTypePipeline.Prehook
defaulthooktemplate
Creates a pipeline default hook class:
- Class name derived from filename
- Pipeline name derived from filename
- Generates inheritance of the form
SomeNamePipeline.DefaultHook
- Inserts correct namespace
Example:
GetProviderTypeDefaultHook.cs → GetProviderTypePipeline.DefaultHook
conditiontemplate
Creates a pipeline condition class:
- Class name derived from filename
- Pipeline name derived from filename
- Generates inheritance of the form
SomeNamePipeline.Condition
- Inserts correct namespace
Example:
GetProviderTypeCondition.cs → GetProviderTypePipeline.Condition
Creates a pipeline input alteration class:
- Class name derived from filename
- Pipeline name derived from filename
- Generates inheritance of the form
SomeNamePipeline.InputAlteration
- Inserts correct namespace
Example:
GetProviderTypeInputAlteration.cs → GetProviderTypePipeline.InputAlteration
namespacetemplate
Inserts a namespace declaration:
- Automatically computes the correct namespace based on file location
- Uses the same logic as other templates (Client, Core, or Plugins)
- Respects ignored folder settings
Useful when you need to add or update a namespace declaration without generating a full class template.
settingstemplate
Generates a Phoenix settings class:
- Correct namespace
- Filename-based class naming
- Implements
ISettings
Works for Client, Core, and Plugin settings.
controllertemplate
Creates an ASP.NET Core controller skeleton:
- Route attributes
- Sample POST endpoint
- Namespace and class name based on filename
- Injected
IPipelineContext
Used for creating backend API controllers.
summarytemplate
Inserts an XML documentation template:
/// <summary>
///
/// </summary>
/// <param name=""></param>
/// <returns></returns>
Inserts a copyright header comment at the top of the file:
- Automatically uses the current filename in the copyright tag
- Consistent format for all files
Example output for MyClass.cs:
// <copyright file="MyClass.cs" company="clarity-ventures.com">
// Copyright (c) clarity-ventures.com. All rights reserved.
// </copyright>
Installation
Install via the VS Code Marketplace:
Pipeline Hooks Lens
Or install manually from a .vsix file:
code --install-extension pipeline-hooks-lens-x.y.z.vsix