Skip to content

Comments

Fix issues in the MI Extension#1044

Merged
ChinthakaJ98 merged 2 commits intowso2:mainfrom
ChinthakaJ98:mi-fixes-12
Dec 3, 2025
Merged

Fix issues in the MI Extension#1044
ChinthakaJ98 merged 2 commits intowso2:mainfrom
ChinthakaJ98:mi-fixes-12

Conversation

@ChinthakaJ98
Copy link
Contributor

@ChinthakaJ98 ChinthakaJ98 commented Dec 3, 2025

This PR will fix the below mentioned issues.

Summary by CodeRabbit

  • New Features

    • Automatic document saving after edits
    • OpenAPI/Swagger sync on document save with user prompts to reconcile differences
  • Bug Fixes

    • Consistent YAML extension handling (.yml → .yaml) for Swagger artifacts and save paths
    • Corrected directory path handling for recursive deletions and ensured file persistence after edits
  • Chores

    • Bumped plugin version to 5.4.13

✏️ Tip: You can customize this high-level summary in your review settings.

@ChinthakaJ98 ChinthakaJ98 requested a review from hevayo as a code owner December 3, 2025 10:52
@ChinthakaJ98 ChinthakaJ98 requested a review from gigara as a code owner December 3, 2025 10:52
@ChinthakaJ98 ChinthakaJ98 added the Checks/Run MI UI Tests Force run MI UI tests label Dec 3, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 3, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Adds OpenAPI ↔ Synapse API synchronization on Swagger file save, normalizes YAML extensions from .yml to .yaml, ensures documents are opened and saved after programmatic edits, switches URI creation for deletions to Uri.file(), and bumps CAR/plugin versions to 5.4.13.

Changes

Cohort / File(s) Summary
OpenAPI Sync & Save Hook
workspaces/mi/mi-extension/src/visualizer/activate.ts
Adds save-triggered synchronization between Swagger and Synapse API: locates counterpart under src/main/wso2mi/resources/api-definitions, initializes RPC/LC, retrieves syntax tree, compares definitions, prompts user to "Update API" or "Update Swagger", extracts resources from the syntax tree, and applies updates with computed insert positions.
Swagger YAML normalization & RPC edits
workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts
Treat .yml inputs as .yaml for generated filenames/paths and when saving swagger definitions; after applyEdit in createAPI/editAPI flows, open the target document if needed and save it to persist edits.
Document persistence helper
workspaces/mi/mi-extension/src/util/workspace.ts
After replacing full file content, ensure the affected document is opened (or reused if already open) and saved immediately following the text edit.
File operations URI change
workspaces/mi/mi-extension/src/util/fileOperations.ts
Use Uri.file(projectDirPath) (instead of Uri.parse(projectDirPath)) when constructing the directory URI for recursive deletion of data mapper resources.
Version bump
workspaces/mi/mi-extension/src/util/templates.ts
Bump LATEST_CAR_PLUGIN_VERSION and synapse-unit-test-maven-plugin from 5.4.12 to 5.4.13.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant Editor as VSCode Editor
    participant SaveHook as Save Handler (activate.ts)
    participant RpcMgr as MiDiagramRpcManager
    participant LC as MILanguageClient
    participant Swagger as Swagger File
    participant Synapse as Synapse API File

    User->>Editor: Save Swagger document
    Editor->>SaveHook: onDidSaveTextDocument
    SaveHook->>SaveHook: check path under resources/api-definitions
    alt counterpart found
        SaveHook->>RpcMgr: init & build apiPath/apiName
        SaveHook->>LC: request syntax tree for API
        SaveHook->>RpcMgr: compareSwaggerAndAPI
        alt definitions differ
            SaveHook->>User: prompt Update API / Update Swagger
            alt Update Swagger
                User->>SaveHook: choose Update Swagger
                SaveHook->>RpcMgr: updateSwaggerFromAPI(...)
                RpcMgr->>Swagger: applyEdit
                Swagger->>Editor: open (if needed)
                Editor->>Swagger: save file
            else Update API
                User->>SaveHook: choose Update API
                SaveHook->>LC: getResources(syntaxTree)
                SaveHook->>RpcMgr: updateAPIFromSwagger(... insertPosition ...)
                RpcMgr->>Synapse: applyEdit
                Synapse->>Editor: open (if needed)
                Editor->>Synapse: save file
            end
        else definitions match
            SaveHook->>SaveHook: no action
        end
    else no counterpart
        SaveHook->>SaveHook: skip sync
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Review activate.ts carefully for AST parsing, user prompt logic, and insertPosition computation.
  • Verify applyEdit → open → save ordering in rpc-manager.ts and workspace.ts to avoid race conditions.
  • Check fileOperations.ts behavior across platforms after switching to Uri.file().
  • templates.ts version bump low risk but confirm CI/build runs.

Possibly related PRs

  • Update plugin versions #981 — touches the same LATEST_CAR_PLUGIN_VERSION constant in workspaces/mi/mi-extension/src/util/templates.ts (version bump).

Suggested reviewers

  • hevayo
  • gigara

Poem

🐰 I hop on saves and tidy the trail,
.yml turned .yaml on my soft little tail.
APIs and Swagger now nuzzle and chat,
Edits opened, saved — imagine that!
A small version bump and a happy hop 🥕

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning The description only lists related issue links without filling in required template sections like Purpose, Goals, Approach, Release notes, or Test environment details. Complete the PR description template by adding Purpose/Goals/Approach sections, Release notes summary, test environment details, and other relevant sections beyond just issue links.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title is vague and generic, using the non-descriptive phrase 'Fix issues' without specifying what issues or the main changes involved. Replace with a more specific title that highlights the primary change, such as 'Add OpenAPI synchronization workflow and fix Swagger/API handling' or 'Improve API definition synchronization and file operations'.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@ChinthakaJ98 ChinthakaJ98 requested review from Copilot and removed request for gigara and hevayo December 3, 2025 10:56
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (4)
workspaces/mi/mi-extension/src/util/fileOperations.ts (1)

601-621: Use of Uri.file here is correct and safer for FS paths

Switching to Uri.file(projectDirPath) makes the deletion more robust across platforms compared to Uri.parse, and matches how projectDirPath is constructed.

If you ever need stricter guarantees that the folder is gone before returning, you could await workspace.fs.delete(...) and handle failures, but that would be a future refinement rather than a blocker for this PR.

workspaces/mi/mi-extension/src/util/workspace.ts (1)

26-72: Persisting edits via document.save() aligns with save‑driven workflows

Ensuring the edited document is opened (if needed) and explicitly saved after workspace.applyEdit looks correct and matches the new “on save” workflows.

Two minor points you might consider (non‑blocking):

  • const uri = documentUri; is redundant; you can use documentUri directly.
  • This will now trigger any onDidSaveTextDocument handlers and format‑on‑save for these edits; verify this is intended for all callers of replaceFullContentToFile to avoid accidental save loops or extra formatting.
workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts (1)

2652-2657: Auto‑saving after applyEdit is useful; verify multi‑document edit behavior

Saving the target document after workspace.applyEdit(edit) is a good addition for keeping swagger/API files in sync with editor state. Two things to double‑check:

  • For ApplyEditsRequest with multiple edits, you currently always save only params.documentUri. If in future any editRequest.documentUri can differ from params.documentUri, those other documents would not be saved.
  • The code assumes params.documentUri is always a filesystem path usable with both Uri.file(uri) and doc.uri.fsPath === uri. Make sure all current callers pass a path (not a file:// URI string) to avoid mismatches.

If the contract guarantees a single target document per applyEdit, this is fine; otherwise consider collecting the distinct document URIs you touch in the 'edits' in params branch and saving each once.

workspaces/mi/mi-extension/src/visualizer/activate.ts (1)

475-488: Make getResources more defensive against unexpected syntax‑tree shapes

getResources assumes st.syntaxTree.api.resource is always an array of nodes exposing methods, uriTemplate/urlMapping, and range.startTagRange/endTagRange. If the language server ever returns a single object for resource (or omits api/resource for some edge cases), this will throw.

Consider:

  • Normalizing to an array and guarding against missing nodes:
const getResources = (st: any): any[] => {
    const api = st?.syntaxTree?.api;
    if (!api || !api.resource) {
        return [];
    }
    const resources = Array.isArray(api.resource) ? api.resource : [api.resource];
    return resources.map(resource => ({
        methods: resource.methods,
        path: resource.uriTemplate || resource.urlMapping,
        position: {
            startLine: resource.range.startTagRange.start.line,
            startColumn: resource.range.startTagRange.start.character,
            endLine: resource.range.endTagRange.end.line,
            endColumn: resource.range.endTagRange.end.character,
        },
        expandable: false,
    }));
};
  • Optionally tightening the type of st / returned items instead of any for better editor support.

This reduces the chance of runtime errors if the syntax‑tree schema evolves.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ad64115 and 3761c2a.

📒 Files selected for processing (5)
  • workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts (3 hunks)
  • workspaces/mi/mi-extension/src/util/fileOperations.ts (1 hunks)
  • workspaces/mi/mi-extension/src/util/templates.ts (2 hunks)
  • workspaces/mi/mi-extension/src/util/workspace.ts (1 hunks)
  • workspaces/mi/mi-extension/src/visualizer/activate.ts (2 hunks)
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-11-26T06:35:19.217Z
Learnt from: KCSAbeywickrama
Repo: wso2/vscode-extensions PR: 653
File: workspaces/bi/bi-extension/src/test/e2e-playwright-tests/data-mapper/DataMapperUtils.ts:173-178
Timestamp: 2025-11-26T06:35:19.217Z
Learning: In workspaces/bi/bi-extension/src/test/e2e-playwright-tests/data-mapper/DataMapperUtils.ts, the commented-out debugging block in the verifyFileContent function (lines 172-177 containing console.log, page.pause, and updateDataFileSync) is intentionally kept as a developer utility for updating test data files when needed. It should not be removed.

Applied to files:

  • workspaces/mi/mi-extension/src/util/fileOperations.ts
  • workspaces/mi/mi-extension/src/util/workspace.ts
📚 Learning: 2025-11-25T06:34:10.812Z
Learnt from: CR
Repo: wso2/vscode-extensions PR: 0
File: workspaces/ballerina/component-diagram/AGENTS.md:0-0
Timestamp: 2025-11-25T06:34:10.812Z
Learning: Applies to workspaces/ballerina/component-diagram/**/*.config.{js,ts} : Use minimatch-compatible glob patterns for file matching in build and test configuration files

Applied to files:

  • workspaces/mi/mi-extension/src/util/fileOperations.ts
📚 Learning: 2025-11-05T10:31:47.583Z
Learnt from: madushajg
Repo: wso2/vscode-extensions PR: 830
File: workspaces/ballerina/ballerina-extension/test/ai/post_proccess/post.test.ts:0-0
Timestamp: 2025-11-05T10:31:47.583Z
Learning: In the workspaces/ballerina/ballerina-extension project, the tsconfig.json uses "rootDirs": ["src", "test"], which allows test files to import from src using shorter relative paths. For example, from test/ai/post_proccess/, the import '../../stateMachine' correctly resolves to src/stateMachine.ts due to this configuration.

Applied to files:

  • workspaces/mi/mi-extension/src/util/fileOperations.ts
📚 Learning: 2025-11-26T07:49:56.428Z
Learnt from: KCSAbeywickrama
Repo: wso2/vscode-extensions PR: 653
File: workspaces/bi/bi-extension/src/test/e2e-playwright-tests/data-mapper/DataMapperUtils.ts:136-141
Timestamp: 2025-11-26T07:49:56.428Z
Learning: In workspaces/bi/bi-extension/src/test/e2e-playwright-tests/data-mapper/DataMapperUtils.ts, the goPrevViewBackButton() method is only called when in a focused view, ensuring breadcrumbs are always present. No guard for empty breadcrumbs is needed.

Applied to files:

  • workspaces/mi/mi-extension/src/util/fileOperations.ts
🪛 Biome (2.1.2)
workspaces/mi/mi-extension/src/visualizer/activate.ts

[error] 377-377: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Safe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)

🔇 Additional comments (3)
workspaces/mi/mi-extension/src/util/templates.ts (2)

31-60: CAR plugin version constant bump is consistent

Updating LATEST_CAR_PLUGIN_VERSION to "5.4.13" keeps the generated root POM in sync with the intended plugin version and the property usage below; no issues seen here.


415-444: synapse-unit-test-maven-plugin version bump looks straightforward

Changing the synapse-unit-test-maven-plugin version to 5.4.13 in the generated POM is consistent with the rest of the version updates in this PR and does not alter the template structure.

workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts (1)

633-636: YAML extension normalization for swagger artifacts looks consistent

Using ext === ".yml" ? ".yaml" : ext both when computing getSwaggerName and when building swaggerRegPath keeps API-XML and swagger filenames aligned and normalizes .yml to .yaml. This should address mismatches between generated swagger filenames and the resources directory layout.

Also applies to: 682-688

Copy link
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

This PR addresses three issues in the MI VSCode extension by implementing automatic document saving and OpenAPI/Swagger synchronization features. The changes ensure file edits are persisted properly and add user prompts to resolve conflicts between Swagger definitions and Synapse API configurations.

Key changes:

  • Added automatic document saving after workspace edits to ensure changes persist
  • Implemented bidirectional synchronization between OpenAPI definitions and Synapse APIs with user confirmation dialogs
  • Standardized Swagger file naming to use .yaml extension instead of .yml
  • Updated plugin version to 5.4.13
  • Fixed URI handling in file operations to use Uri.file() instead of Uri.parse()

Reviewed changes

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

Show a summary per file
File Description
workspaces/mi/mi-extension/src/visualizer/activate.ts Adds Swagger/API synchronization logic with user prompts when definitions diverge, includes new helper function to extract API resources
workspaces/mi/mi-extension/src/util/workspace.ts Adds explicit document save after applying workspace edits to persist changes
workspaces/mi/mi-extension/src/util/templates.ts Updates CAR plugin and synapse-unit-test-maven-plugin versions to 5.4.13
workspaces/mi/mi-extension/src/util/fileOperations.ts Fixes directory deletion by using Uri.file() instead of Uri.parse() for proper file path handling
workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts Normalizes Swagger file extensions from .yml to .yaml and adds document save after edits

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

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (2)
workspaces/mi/mi-extension/src/visualizer/activate.ts (2)

352-399: Add error handling to the promise chain and wrap case "Update API" in a block.

The promise chain lacks error handling. If getSyntaxTree or compareSwaggerAndAPI fails, it results in an unhandled promise rejection. Additionally, the const resources declaration on line 377 requires block scope to satisfy the noSwitchDeclarations lint rule.

-            langClient?.getSyntaxTree({
-                documentIdentifier: {
-                    uri: apiPath
-                }
-            }).then(st => {
-                rpcManager.compareSwaggerAndAPI({
-                    apiName: apiName,
-                    apiPath: apiPath
-                }).then(async response => {
+            langClient?.getSyntaxTree({
+                documentIdentifier: {
+                    uri: apiPath
+                }
+            }).then(st => {
+                rpcManager.compareSwaggerAndAPI({
+                    apiName: apiName,
+                    apiPath: apiPath
+                }).then(async response => {
                     if (response.swaggerExists && !response.isEqual) {
                         const confirmUpdate = await vscode.window.showInformationMessage(
                             'The OpenAPI definition is different from the Synapse API.',
                             { modal: true },
                             "Update API", "Update Swagger"
                         );
                         switch (confirmUpdate) {
                             case "Update Swagger":
                                 rpcManager.updateSwaggerFromAPI({
                                     apiName: apiName,
                                     apiPath: apiPath,
                                     existingSwagger: response.existingSwagger,
                                     generatedSwagger: response.generatedSwagger
                                 });
                                 break;
-                            case "Update API":
-                                const resources = getResources(st);
+                            case "Update API": {
+                                const resources = getResources(st);
                                 rpcManager.updateAPIFromSwagger({
                                     apiName: apiName,
                                     apiPath: apiPath,
                                     existingSwagger: response.existingSwagger,
                                     generatedSwagger: response.generatedSwagger,
                                     resources: resources.map(r => ({
                                         path: r.path,
                                         methods: r.methods,
                                         position: r.position
                                     })),
                                     insertPosition: {
                                         line: st.syntaxTree.api.range.endTagRange.start.line,
                                         character: st.syntaxTree.api.range.endTagRange.start.character
                                     }
                                 });
                                 break;
+                            }
                             default:
                                 break;
                         }
                     }
-                })
-            });
+                }).catch(error => {
+                    console.error('Failed to compare Swagger and API:', error);
+                });
+            }).catch(error => {
+                console.error('Failed to get syntax tree:', error);
+            });

475-488: Add defensive checks for resource range properties.

If any resource in the syntax tree lacks the expected range.startTagRange or range.endTagRange structure, the code will throw a runtime error. Consider adding guards or fallback values.

 const getResources = (st: any): any[] => {
-    const resources: any[] = st?.syntaxTree?.api?.resource ?? [];
+    const resources: any[] = Array.isArray(st?.syntaxTree?.api?.resource) 
+        ? st.syntaxTree.api.resource 
+        : [];
     return resources.map((resource) => ({
         methods: resource.methods,
         path: resource.uriTemplate || resource.urlMapping,
         position: {
-            startLine: resource.range.startTagRange.start.line,
-            startColumn: resource.range.startTagRange.start.character,
-            endLine: resource.range.endTagRange.end.line,
-            endColumn: resource.range.endTagRange.end.character,
+            startLine: resource.range?.startTagRange?.start?.line ?? 0,
+            startColumn: resource.range?.startTagRange?.start?.character ?? 0,
+            endLine: resource.range?.endTagRange?.end?.line ?? 0,
+            endColumn: resource.range?.endTagRange?.end?.character ?? 0,
         },
         expandable: false
-    }));
+    })).filter(r => r.position.startLine > 0);
 };
🧹 Nitpick comments (1)
workspaces/mi/mi-extension/src/util/workspace.ts (1)

44-48: Consider checking applyEdit result before proceeding.

workspace.applyEdit(edit) returns a Thenable<boolean> indicating success. If the edit fails, the code will still attempt to open and save the document, which could lead to unexpected behavior or saving stale content.

-    await workspace.applyEdit(edit);
-    const file = Uri.file(documentUri);
-    let document = workspace.textDocuments.find(doc => doc.uri.fsPath === documentUri) 
-                    || await workspace.openTextDocument(file);
-    await document.save();
+    const editApplied = await workspace.applyEdit(edit);
+    if (!editApplied) {
+        console.error(`Failed to apply edit to ${documentUri}`);
+        return;
+    }
+    const file = Uri.file(documentUri);
+    let document = workspace.textDocuments.find(doc => doc.uri.fsPath === documentUri) 
+                    || await workspace.openTextDocument(file);
+    await document.save();
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 323413b and 9e82d6a.

📒 Files selected for processing (5)
  • workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts (3 hunks)
  • workspaces/mi/mi-extension/src/util/fileOperations.ts (1 hunks)
  • workspaces/mi/mi-extension/src/util/templates.ts (2 hunks)
  • workspaces/mi/mi-extension/src/util/workspace.ts (1 hunks)
  • workspaces/mi/mi-extension/src/visualizer/activate.ts (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
  • workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts
  • workspaces/mi/mi-extension/src/util/templates.ts
  • workspaces/mi/mi-extension/src/util/fileOperations.ts
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2025-11-26T06:35:19.217Z
Learnt from: KCSAbeywickrama
Repo: wso2/vscode-extensions PR: 653
File: workspaces/bi/bi-extension/src/test/e2e-playwright-tests/data-mapper/DataMapperUtils.ts:173-178
Timestamp: 2025-11-26T06:35:19.217Z
Learning: In workspaces/bi/bi-extension/src/test/e2e-playwright-tests/data-mapper/DataMapperUtils.ts, the commented-out debugging block in the verifyFileContent function (lines 172-177 containing console.log, page.pause, and updateDataFileSync) is intentionally kept as a developer utility for updating test data files when needed. It should not be removed.

Applied to files:

  • workspaces/mi/mi-extension/src/util/workspace.ts
📚 Learning: 2025-11-25T06:34:10.812Z
Learnt from: CR
Repo: wso2/vscode-extensions PR: 0
File: workspaces/ballerina/component-diagram/AGENTS.md:0-0
Timestamp: 2025-11-25T06:34:10.812Z
Learning: Applies to workspaces/ballerina/component-diagram/src/**/*.{ts,tsx} : All async operations and promise handling in diagram utilities should use async/await syntax instead of .then() callbacks

Applied to files:

  • workspaces/mi/mi-extension/src/visualizer/activate.ts
📚 Learning: 2025-11-26T06:33:22.950Z
Learnt from: KCSAbeywickrama
Repo: wso2/vscode-extensions PR: 653
File: workspaces/bi/bi-extension/src/test/e2e-playwright-tests/data-mapper/DataMapperUtils.ts:86-112
Timestamp: 2025-11-26T06:33:22.950Z
Learning: In workspaces/bi/bi-extension/src/test/e2e-playwright-tests/data-mapper/DataMapperUtils.ts, empty catch blocks around progress ring waitForSelector calls (state: 'attached' and 'detached') are intentional. The progress ring duration depends on machine performance and may appear very briefly, causing the wait to miss the event. The try-catch allows the test to proceed gracefully regardless of timing.

Applied to files:

  • workspaces/mi/mi-extension/src/visualizer/activate.ts
🧬 Code graph analysis (1)
workspaces/mi/mi-extension/src/visualizer/activate.ts (1)
workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts (1)
  • MiDiagramRpcManager (354-6128)
🪛 Biome (2.1.2)
workspaces/mi/mi-extension/src/visualizer/activate.ts

[error] 377-377: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.

The declaration is defined in this switch clause:

Safe fix: Wrap the declaration in a block.

(lint/correctness/noSwitchDeclarations)

@ChinthakaJ98 ChinthakaJ98 removed the Checks/Run MI UI Tests Force run MI UI tests label Dec 3, 2025
@ChinthakaJ98 ChinthakaJ98 merged commit 42cb8dd into wso2:main Dec 3, 2025
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants