Implement Workspace Diagnostic Scanning (Issue 31) - #33

Open
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan
Open

Implement Workspace Diagnostic Scanning (Issue 31)#33
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan

Conversation

@Moataz-Aldawood

@Moataz-AldawoodMoataz-Aldawood commented Aug 9, 2026

Copy link
Copy Markdown

Pull Request: Implement Workspace Diagnostic Scanning (Issue #31)

Overview

This PR introduces a much-requested feature: the ability to proactively scan an entire workspace for compilation errors and warnings without requiring the user to open every file manually. It fulfills Issue #31 and also addresses exclusion glob-patterns requested in Issue #19.


Changes & Features Introduced

  1. Workspace Scanning Configuration:

    • netbeans.autoScanWorkspace: A new boolean setting (default: false) that allows users to automatically trigger a full workspace diagnostic scan whenever they load a project.
    • netbeans.scanExclude: A new array configuration (default: ["**/node_modules/**", "**/target/**", "**/build/**"]) allowing users to define glob patterns for directories that should be skipped during the scan to save resources.
  2. New User Commands:

    • nbls.workspace.scan (Java: Scan Workspace for Diagnostics): Allows the user to manually trigger a background scan of all .java files in the workspace at any time. It includes a cancellable VS Code progress bar.
    • nbls.workspace.scan.clear (Java: Clear Workspace Diagnostics): A utility command to instantly clear all background scan results from the custom VS Code Problems panel collection.
  3. Background Scanner Logic (extension.ts):

    • Implemented doWorkspaceScan which batch processes files by invoking the backend nbls.get.diagnostics command in small chunks. This prevents overloading the LSP server with hundreds of simultaneous parsing requests.
    • Added specific client-side filtering to gracefully drop massive ExceptionInInitializerError stack traces caused by upstream Lombok incompatibilities.

Fixes

Critical Bug Fix in TextDocumentServiceImpl.java
While implementing the scanner, we discovered a major bug in the computeDiagnostics method inside the backend language server. Previously, when the server computed errors and hints simultaneously, the resulting result list was being overwritten rather than aggregated. This caused standard compilation errors to randomly disappear or be completely overwritten by simple code hints.

  • Fix: Refactored computeDiagnostics to use an ArrayList<> and .addAll() so that both ERRORS and HINTS are correctly merged and returned to the client in a single payload.

Challenges Encountered

Lombok Compatibility on master Branch:
During testing on the master branch, we encountered a significant challenge with Lombok throwing fatal java.lang.NoClassDefFoundError: Could not initialize class lombok.javac.Javac exceptions.

  • Investigation: We discovered this is an upstream regression in the apache/netbeans master branch. The NetBeans team recently updated the internal nbjavac compiler to Java 22/23 and unfortunately dropped the EndPosTable compatibility patch (which existed in NetBeans 21) that allowed Lombok to function on newer JDKs.
  • Resolution: Because this is an upstream compiler issue, we cannot fix it inside the VS Code extension wrapper. We implemented a temporary client-side filter in the scanner to prevent these massive, noisy stack traces from flooding the user's Problems panel, whilst continuing to report the valid Java cannot find symbol errors that result from the failed Lombok processing.

Native LSP Diagnostic Caching:
We encountered confusion regarding lingering diagnostics in the Problems panel after closing files. This is due to the native vscode-languageclient architecture where the backend server does not explicitly send empty arrays ([]) to clear diagnostics when files are closed. We solved this from the user's perspective by keeping our background scan results isolated in a separate, clearable custom bucket (projectDiagnosticCollection).


Recommendations for Upstream

  1. Restore EndPosTable in nbjavac: We highly recommend filing a bug against the core apache/netbeans repository to reinstate the dummy EndPosTable patch in nbjavac for Java 22/23. Until this is fixed upstream, Lombok users running the latest NetBeans Language Server on modern JDKs will experience completely broken annotation processing.
  2. Empty Diagnostic Arrays on didClose: The NetBeans Language Server should be updated to actively send publishDiagnostics(uri, []) when it receives a didClose notification for a file, ensuring that the VS Code Problems panel cleans up gracefully when a user closes a broken file.

PR approval and merge checklist:

  1. Is this PR squashed?
  2. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  3. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

Comment threadvscode/package.json
Sign up for freeto 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.

2 participants

@Moataz-Aldawood@JaroslavTulach
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Implement Workspace Diagnostic Scanning (Issue 31) - #33

Open
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan
Open

Implement Workspace Diagnostic Scanning (Issue 31)#33
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan

Conversation

@Moataz-Aldawood

@Moataz-AldawoodMoataz-Aldawood commented Aug 9, 2026

Copy link
Copy Markdown

Pull Request: Implement Workspace Diagnostic Scanning (Issue #31)

Overview

This PR introduces a much-requested feature: the ability to proactively scan an entire workspace for compilation errors and warnings without requiring the user to open every file manually. It fulfills Issue #31 and also addresses exclusion glob-patterns requested in Issue #19.


Changes & Features Introduced

  1. Workspace Scanning Configuration:

    • netbeans.autoScanWorkspace: A new boolean setting (default: false) that allows users to automatically trigger a full workspace diagnostic scan whenever they load a project.
    • netbeans.scanExclude: A new array configuration (default: ["**/node_modules/**", "**/target/**", "**/build/**"]) allowing users to define glob patterns for directories that should be skipped during the scan to save resources.
  2. New User Commands:

    • nbls.workspace.scan (Java: Scan Workspace for Diagnostics): Allows the user to manually trigger a background scan of all .java files in the workspace at any time. It includes a cancellable VS Code progress bar.
    • nbls.workspace.scan.clear (Java: Clear Workspace Diagnostics): A utility command to instantly clear all background scan results from the custom VS Code Problems panel collection.
  3. Background Scanner Logic (extension.ts):

    • Implemented doWorkspaceScan which batch processes files by invoking the backend nbls.get.diagnostics command in small chunks. This prevents overloading the LSP server with hundreds of simultaneous parsing requests.
    • Added specific client-side filtering to gracefully drop massive ExceptionInInitializerError stack traces caused by upstream Lombok incompatibilities.

Fixes

Critical Bug Fix in TextDocumentServiceImpl.java
While implementing the scanner, we discovered a major bug in the computeDiagnostics method inside the backend language server. Previously, when the server computed errors and hints simultaneously, the resulting result list was being overwritten rather than aggregated. This caused standard compilation errors to randomly disappear or be completely overwritten by simple code hints.

  • Fix: Refactored computeDiagnostics to use an ArrayList<> and .addAll() so that both ERRORS and HINTS are correctly merged and returned to the client in a single payload.

Challenges Encountered

Lombok Compatibility on master Branch:
During testing on the master branch, we encountered a significant challenge with Lombok throwing fatal java.lang.NoClassDefFoundError: Could not initialize class lombok.javac.Javac exceptions.

  • Investigation: We discovered this is an upstream regression in the apache/netbeans master branch. The NetBeans team recently updated the internal nbjavac compiler to Java 22/23 and unfortunately dropped the EndPosTable compatibility patch (which existed in NetBeans 21) that allowed Lombok to function on newer JDKs.
  • Resolution: Because this is an upstream compiler issue, we cannot fix it inside the VS Code extension wrapper. We implemented a temporary client-side filter in the scanner to prevent these massive, noisy stack traces from flooding the user's Problems panel, whilst continuing to report the valid Java cannot find symbol errors that result from the failed Lombok processing.

Native LSP Diagnostic Caching:
We encountered confusion regarding lingering diagnostics in the Problems panel after closing files. This is due to the native vscode-languageclient architecture where the backend server does not explicitly send empty arrays ([]) to clear diagnostics when files are closed. We solved this from the user's perspective by keeping our background scan results isolated in a separate, clearable custom bucket (projectDiagnosticCollection).


Recommendations for Upstream

  1. Restore EndPosTable in nbjavac: We highly recommend filing a bug against the core apache/netbeans repository to reinstate the dummy EndPosTable patch in nbjavac for Java 22/23. Until this is fixed upstream, Lombok users running the latest NetBeans Language Server on modern JDKs will experience completely broken annotation processing.
  2. Empty Diagnostic Arrays on didClose: The NetBeans Language Server should be updated to actively send publishDiagnostics(uri, []) when it receives a didClose notification for a file, ensuring that the VS Code Problems panel cleans up gracefully when a user closes a broken file.

PR approval and merge checklist:

  1. Is this PR squashed?
  2. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  3. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

Comment threadvscode/package.json
Sign up for freeto 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.

2 participants

@Moataz-Aldawood@JaroslavTulach
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implement Workspace Diagnostic Scanning (Issue 31) - #33

Open
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan
Open

Implement Workspace Diagnostic Scanning (Issue 31)#33
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan

Conversation

@Moataz-Aldawood

@Moataz-AldawoodMoataz-Aldawood commented Aug 9, 2026

Copy link
Copy Markdown

Pull Request: Implement Workspace Diagnostic Scanning (Issue #31)

Overview

This PR introduces a much-requested feature: the ability to proactively scan an entire workspace for compilation errors and warnings without requiring the user to open every file manually. It fulfills Issue #31 and also addresses exclusion glob-patterns requested in Issue #19.


Changes & Features Introduced

  1. Workspace Scanning Configuration:

    • netbeans.autoScanWorkspace: A new boolean setting (default: false) that allows users to automatically trigger a full workspace diagnostic scan whenever they load a project.
    • netbeans.scanExclude: A new array configuration (default: ["**/node_modules/**", "**/target/**", "**/build/**"]) allowing users to define glob patterns for directories that should be skipped during the scan to save resources.
  2. New User Commands:

    • nbls.workspace.scan (Java: Scan Workspace for Diagnostics): Allows the user to manually trigger a background scan of all .java files in the workspace at any time. It includes a cancellable VS Code progress bar.
    • nbls.workspace.scan.clear (Java: Clear Workspace Diagnostics): A utility command to instantly clear all background scan results from the custom VS Code Problems panel collection.
  3. Background Scanner Logic (extension.ts):

    • Implemented doWorkspaceScan which batch processes files by invoking the backend nbls.get.diagnostics command in small chunks. This prevents overloading the LSP server with hundreds of simultaneous parsing requests.
    • Added specific client-side filtering to gracefully drop massive ExceptionInInitializerError stack traces caused by upstream Lombok incompatibilities.

Fixes

Critical Bug Fix in TextDocumentServiceImpl.java
While implementing the scanner, we discovered a major bug in the computeDiagnostics method inside the backend language server. Previously, when the server computed errors and hints simultaneously, the resulting result list was being overwritten rather than aggregated. This caused standard compilation errors to randomly disappear or be completely overwritten by simple code hints.

  • Fix: Refactored computeDiagnostics to use an ArrayList<> and .addAll() so that both ERRORS and HINTS are correctly merged and returned to the client in a single payload.

Challenges Encountered

Lombok Compatibility on master Branch:
During testing on the master branch, we encountered a significant challenge with Lombok throwing fatal java.lang.NoClassDefFoundError: Could not initialize class lombok.javac.Javac exceptions.

  • Investigation: We discovered this is an upstream regression in the apache/netbeans master branch. The NetBeans team recently updated the internal nbjavac compiler to Java 22/23 and unfortunately dropped the EndPosTable compatibility patch (which existed in NetBeans 21) that allowed Lombok to function on newer JDKs.
  • Resolution: Because this is an upstream compiler issue, we cannot fix it inside the VS Code extension wrapper. We implemented a temporary client-side filter in the scanner to prevent these massive, noisy stack traces from flooding the user's Problems panel, whilst continuing to report the valid Java cannot find symbol errors that result from the failed Lombok processing.

Native LSP Diagnostic Caching:
We encountered confusion regarding lingering diagnostics in the Problems panel after closing files. This is due to the native vscode-languageclient architecture where the backend server does not explicitly send empty arrays ([]) to clear diagnostics when files are closed. We solved this from the user's perspective by keeping our background scan results isolated in a separate, clearable custom bucket (projectDiagnosticCollection).


Recommendations for Upstream

  1. Restore EndPosTable in nbjavac: We highly recommend filing a bug against the core apache/netbeans repository to reinstate the dummy EndPosTable patch in nbjavac for Java 22/23. Until this is fixed upstream, Lombok users running the latest NetBeans Language Server on modern JDKs will experience completely broken annotation processing.
  2. Empty Diagnostic Arrays on didClose: The NetBeans Language Server should be updated to actively send publishDiagnostics(uri, []) when it receives a didClose notification for a file, ensuring that the VS Code Problems panel cleans up gracefully when a user closes a broken file.

PR approval and merge checklist:

  1. Is this PR squashed?
  2. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  3. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

Comment threadvscode/package.json
Sign up for freeto 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.

2 participants

@Moataz-Aldawood@JaroslavTulach
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implement Workspace Diagnostic Scanning (Issue 31) - #33

Open
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan
Open

Implement Workspace Diagnostic Scanning (Issue 31)#33
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan

Conversation

@Moataz-Aldawood

@Moataz-AldawoodMoataz-Aldawood commented Aug 9, 2026

Copy link
Copy Markdown

Pull Request: Implement Workspace Diagnostic Scanning (Issue #31)

Overview

This PR introduces a much-requested feature: the ability to proactively scan an entire workspace for compilation errors and warnings without requiring the user to open every file manually. It fulfills Issue #31 and also addresses exclusion glob-patterns requested in Issue #19.


Changes & Features Introduced

  1. Workspace Scanning Configuration:

    • netbeans.autoScanWorkspace: A new boolean setting (default: false) that allows users to automatically trigger a full workspace diagnostic scan whenever they load a project.
    • netbeans.scanExclude: A new array configuration (default: ["**/node_modules/**", "**/target/**", "**/build/**"]) allowing users to define glob patterns for directories that should be skipped during the scan to save resources.
  2. New User Commands:

    • nbls.workspace.scan (Java: Scan Workspace for Diagnostics): Allows the user to manually trigger a background scan of all .java files in the workspace at any time. It includes a cancellable VS Code progress bar.
    • nbls.workspace.scan.clear (Java: Clear Workspace Diagnostics): A utility command to instantly clear all background scan results from the custom VS Code Problems panel collection.
  3. Background Scanner Logic (extension.ts):

    • Implemented doWorkspaceScan which batch processes files by invoking the backend nbls.get.diagnostics command in small chunks. This prevents overloading the LSP server with hundreds of simultaneous parsing requests.
    • Added specific client-side filtering to gracefully drop massive ExceptionInInitializerError stack traces caused by upstream Lombok incompatibilities.

Fixes

Critical Bug Fix in TextDocumentServiceImpl.java
While implementing the scanner, we discovered a major bug in the computeDiagnostics method inside the backend language server. Previously, when the server computed errors and hints simultaneously, the resulting result list was being overwritten rather than aggregated. This caused standard compilation errors to randomly disappear or be completely overwritten by simple code hints.

  • Fix: Refactored computeDiagnostics to use an ArrayList<> and .addAll() so that both ERRORS and HINTS are correctly merged and returned to the client in a single payload.

Challenges Encountered

Lombok Compatibility on master Branch:
During testing on the master branch, we encountered a significant challenge with Lombok throwing fatal java.lang.NoClassDefFoundError: Could not initialize class lombok.javac.Javac exceptions.

  • Investigation: We discovered this is an upstream regression in the apache/netbeans master branch. The NetBeans team recently updated the internal nbjavac compiler to Java 22/23 and unfortunately dropped the EndPosTable compatibility patch (which existed in NetBeans 21) that allowed Lombok to function on newer JDKs.
  • Resolution: Because this is an upstream compiler issue, we cannot fix it inside the VS Code extension wrapper. We implemented a temporary client-side filter in the scanner to prevent these massive, noisy stack traces from flooding the user's Problems panel, whilst continuing to report the valid Java cannot find symbol errors that result from the failed Lombok processing.

Native LSP Diagnostic Caching:
We encountered confusion regarding lingering diagnostics in the Problems panel after closing files. This is due to the native vscode-languageclient architecture where the backend server does not explicitly send empty arrays ([]) to clear diagnostics when files are closed. We solved this from the user's perspective by keeping our background scan results isolated in a separate, clearable custom bucket (projectDiagnosticCollection).


Recommendations for Upstream

  1. Restore EndPosTable in nbjavac: We highly recommend filing a bug against the core apache/netbeans repository to reinstate the dummy EndPosTable patch in nbjavac for Java 22/23. Until this is fixed upstream, Lombok users running the latest NetBeans Language Server on modern JDKs will experience completely broken annotation processing.
  2. Empty Diagnostic Arrays on didClose: The NetBeans Language Server should be updated to actively send publishDiagnostics(uri, []) when it receives a didClose notification for a file, ensuring that the VS Code Problems panel cleans up gracefully when a user closes a broken file.

PR approval and merge checklist:

  1. Is this PR squashed?
  2. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  3. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

Comment threadvscode/package.json
Sign up for freeto 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.

2 participants

@Moataz-Aldawood@JaroslavTulach
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Implement Workspace Diagnostic Scanning (Issue 31) - #33

Open
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan
Open

Implement Workspace Diagnostic Scanning (Issue 31)#33
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan

Conversation

@Moataz-Aldawood

@Moataz-AldawoodMoataz-Aldawood commented Aug 9, 2026

Copy link
Copy Markdown

Pull Request: Implement Workspace Diagnostic Scanning (Issue #31)

Overview

This PR introduces a much-requested feature: the ability to proactively scan an entire workspace for compilation errors and warnings without requiring the user to open every file manually. It fulfills Issue #31 and also addresses exclusion glob-patterns requested in Issue #19.


Changes & Features Introduced

  1. Workspace Scanning Configuration:

    • netbeans.autoScanWorkspace: A new boolean setting (default: false) that allows users to automatically trigger a full workspace diagnostic scan whenever they load a project.
    • netbeans.scanExclude: A new array configuration (default: ["**/node_modules/**", "**/target/**", "**/build/**"]) allowing users to define glob patterns for directories that should be skipped during the scan to save resources.
  2. New User Commands:

    • nbls.workspace.scan (Java: Scan Workspace for Diagnostics): Allows the user to manually trigger a background scan of all .java files in the workspace at any time. It includes a cancellable VS Code progress bar.
    • nbls.workspace.scan.clear (Java: Clear Workspace Diagnostics): A utility command to instantly clear all background scan results from the custom VS Code Problems panel collection.
  3. Background Scanner Logic (extension.ts):

    • Implemented doWorkspaceScan which batch processes files by invoking the backend nbls.get.diagnostics command in small chunks. This prevents overloading the LSP server with hundreds of simultaneous parsing requests.
    • Added specific client-side filtering to gracefully drop massive ExceptionInInitializerError stack traces caused by upstream Lombok incompatibilities.

Fixes

Critical Bug Fix in TextDocumentServiceImpl.java
While implementing the scanner, we discovered a major bug in the computeDiagnostics method inside the backend language server. Previously, when the server computed errors and hints simultaneously, the resulting result list was being overwritten rather than aggregated. This caused standard compilation errors to randomly disappear or be completely overwritten by simple code hints.

  • Fix: Refactored computeDiagnostics to use an ArrayList<> and .addAll() so that both ERRORS and HINTS are correctly merged and returned to the client in a single payload.

Challenges Encountered

Lombok Compatibility on master Branch:
During testing on the master branch, we encountered a significant challenge with Lombok throwing fatal java.lang.NoClassDefFoundError: Could not initialize class lombok.javac.Javac exceptions.

  • Investigation: We discovered this is an upstream regression in the apache/netbeans master branch. The NetBeans team recently updated the internal nbjavac compiler to Java 22/23 and unfortunately dropped the EndPosTable compatibility patch (which existed in NetBeans 21) that allowed Lombok to function on newer JDKs.
  • Resolution: Because this is an upstream compiler issue, we cannot fix it inside the VS Code extension wrapper. We implemented a temporary client-side filter in the scanner to prevent these massive, noisy stack traces from flooding the user's Problems panel, whilst continuing to report the valid Java cannot find symbol errors that result from the failed Lombok processing.

Native LSP Diagnostic Caching:
We encountered confusion regarding lingering diagnostics in the Problems panel after closing files. This is due to the native vscode-languageclient architecture where the backend server does not explicitly send empty arrays ([]) to clear diagnostics when files are closed. We solved this from the user's perspective by keeping our background scan results isolated in a separate, clearable custom bucket (projectDiagnosticCollection).


Recommendations for Upstream

  1. Restore EndPosTable in nbjavac: We highly recommend filing a bug against the core apache/netbeans repository to reinstate the dummy EndPosTable patch in nbjavac for Java 22/23. Until this is fixed upstream, Lombok users running the latest NetBeans Language Server on modern JDKs will experience completely broken annotation processing.
  2. Empty Diagnostic Arrays on didClose: The NetBeans Language Server should be updated to actively send publishDiagnostics(uri, []) when it receives a didClose notification for a file, ensuring that the VS Code Problems panel cleans up gracefully when a user closes a broken file.

PR approval and merge checklist:

  1. Is this PR squashed?
  2. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  3. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

Comment threadvscode/package.json
Sign up for freeto 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.

2 participants

@Moataz-Aldawood@JaroslavTulach
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implement Workspace Diagnostic Scanning (Issue 31) - #33

Open
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan
Open

Implement Workspace Diagnostic Scanning (Issue 31)#33
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan

Conversation

@Moataz-Aldawood

@Moataz-AldawoodMoataz-Aldawood commented Aug 9, 2026

Copy link
Copy Markdown

Pull Request: Implement Workspace Diagnostic Scanning (Issue #31)

Overview

This PR introduces a much-requested feature: the ability to proactively scan an entire workspace for compilation errors and warnings without requiring the user to open every file manually. It fulfills Issue #31 and also addresses exclusion glob-patterns requested in Issue #19.


Changes & Features Introduced

  1. Workspace Scanning Configuration:

    • netbeans.autoScanWorkspace: A new boolean setting (default: false) that allows users to automatically trigger a full workspace diagnostic scan whenever they load a project.
    • netbeans.scanExclude: A new array configuration (default: ["**/node_modules/**", "**/target/**", "**/build/**"]) allowing users to define glob patterns for directories that should be skipped during the scan to save resources.
  2. New User Commands:

    • nbls.workspace.scan (Java: Scan Workspace for Diagnostics): Allows the user to manually trigger a background scan of all .java files in the workspace at any time. It includes a cancellable VS Code progress bar.
    • nbls.workspace.scan.clear (Java: Clear Workspace Diagnostics): A utility command to instantly clear all background scan results from the custom VS Code Problems panel collection.
  3. Background Scanner Logic (extension.ts):

    • Implemented doWorkspaceScan which batch processes files by invoking the backend nbls.get.diagnostics command in small chunks. This prevents overloading the LSP server with hundreds of simultaneous parsing requests.
    • Added specific client-side filtering to gracefully drop massive ExceptionInInitializerError stack traces caused by upstream Lombok incompatibilities.

Fixes

Critical Bug Fix in TextDocumentServiceImpl.java
While implementing the scanner, we discovered a major bug in the computeDiagnostics method inside the backend language server. Previously, when the server computed errors and hints simultaneously, the resulting result list was being overwritten rather than aggregated. This caused standard compilation errors to randomly disappear or be completely overwritten by simple code hints.

  • Fix: Refactored computeDiagnostics to use an ArrayList<> and .addAll() so that both ERRORS and HINTS are correctly merged and returned to the client in a single payload.

Challenges Encountered

Lombok Compatibility on master Branch:
During testing on the master branch, we encountered a significant challenge with Lombok throwing fatal java.lang.NoClassDefFoundError: Could not initialize class lombok.javac.Javac exceptions.

  • Investigation: We discovered this is an upstream regression in the apache/netbeans master branch. The NetBeans team recently updated the internal nbjavac compiler to Java 22/23 and unfortunately dropped the EndPosTable compatibility patch (which existed in NetBeans 21) that allowed Lombok to function on newer JDKs.
  • Resolution: Because this is an upstream compiler issue, we cannot fix it inside the VS Code extension wrapper. We implemented a temporary client-side filter in the scanner to prevent these massive, noisy stack traces from flooding the user's Problems panel, whilst continuing to report the valid Java cannot find symbol errors that result from the failed Lombok processing.

Native LSP Diagnostic Caching:
We encountered confusion regarding lingering diagnostics in the Problems panel after closing files. This is due to the native vscode-languageclient architecture where the backend server does not explicitly send empty arrays ([]) to clear diagnostics when files are closed. We solved this from the user's perspective by keeping our background scan results isolated in a separate, clearable custom bucket (projectDiagnosticCollection).


Recommendations for Upstream

  1. Restore EndPosTable in nbjavac: We highly recommend filing a bug against the core apache/netbeans repository to reinstate the dummy EndPosTable patch in nbjavac for Java 22/23. Until this is fixed upstream, Lombok users running the latest NetBeans Language Server on modern JDKs will experience completely broken annotation processing.
  2. Empty Diagnostic Arrays on didClose: The NetBeans Language Server should be updated to actively send publishDiagnostics(uri, []) when it receives a didClose notification for a file, ensuring that the VS Code Problems panel cleans up gracefully when a user closes a broken file.

PR approval and merge checklist:

  1. Is this PR squashed?
  2. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  3. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

Comment threadvscode/package.json
Sign up for freeto 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.

2 participants

@Moataz-Aldawood@JaroslavTulach
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implement Workspace Diagnostic Scanning (Issue 31) - #33

Open
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan
Open

Implement Workspace Diagnostic Scanning (Issue 31)#33
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan

Conversation

@Moataz-Aldawood

@Moataz-AldawoodMoataz-Aldawood commented Aug 9, 2026

Copy link
Copy Markdown

Pull Request: Implement Workspace Diagnostic Scanning (Issue #31)

Overview

This PR introduces a much-requested feature: the ability to proactively scan an entire workspace for compilation errors and warnings without requiring the user to open every file manually. It fulfills Issue #31 and also addresses exclusion glob-patterns requested in Issue #19.


Changes & Features Introduced

  1. Workspace Scanning Configuration:

    • netbeans.autoScanWorkspace: A new boolean setting (default: false) that allows users to automatically trigger a full workspace diagnostic scan whenever they load a project.
    • netbeans.scanExclude: A new array configuration (default: ["**/node_modules/**", "**/target/**", "**/build/**"]) allowing users to define glob patterns for directories that should be skipped during the scan to save resources.
  2. New User Commands:

    • nbls.workspace.scan (Java: Scan Workspace for Diagnostics): Allows the user to manually trigger a background scan of all .java files in the workspace at any time. It includes a cancellable VS Code progress bar.
    • nbls.workspace.scan.clear (Java: Clear Workspace Diagnostics): A utility command to instantly clear all background scan results from the custom VS Code Problems panel collection.
  3. Background Scanner Logic (extension.ts):

    • Implemented doWorkspaceScan which batch processes files by invoking the backend nbls.get.diagnostics command in small chunks. This prevents overloading the LSP server with hundreds of simultaneous parsing requests.
    • Added specific client-side filtering to gracefully drop massive ExceptionInInitializerError stack traces caused by upstream Lombok incompatibilities.

Fixes

Critical Bug Fix in TextDocumentServiceImpl.java
While implementing the scanner, we discovered a major bug in the computeDiagnostics method inside the backend language server. Previously, when the server computed errors and hints simultaneously, the resulting result list was being overwritten rather than aggregated. This caused standard compilation errors to randomly disappear or be completely overwritten by simple code hints.

  • Fix: Refactored computeDiagnostics to use an ArrayList<> and .addAll() so that both ERRORS and HINTS are correctly merged and returned to the client in a single payload.

Challenges Encountered

Lombok Compatibility on master Branch:
During testing on the master branch, we encountered a significant challenge with Lombok throwing fatal java.lang.NoClassDefFoundError: Could not initialize class lombok.javac.Javac exceptions.

  • Investigation: We discovered this is an upstream regression in the apache/netbeans master branch. The NetBeans team recently updated the internal nbjavac compiler to Java 22/23 and unfortunately dropped the EndPosTable compatibility patch (which existed in NetBeans 21) that allowed Lombok to function on newer JDKs.
  • Resolution: Because this is an upstream compiler issue, we cannot fix it inside the VS Code extension wrapper. We implemented a temporary client-side filter in the scanner to prevent these massive, noisy stack traces from flooding the user's Problems panel, whilst continuing to report the valid Java cannot find symbol errors that result from the failed Lombok processing.

Native LSP Diagnostic Caching:
We encountered confusion regarding lingering diagnostics in the Problems panel after closing files. This is due to the native vscode-languageclient architecture where the backend server does not explicitly send empty arrays ([]) to clear diagnostics when files are closed. We solved this from the user's perspective by keeping our background scan results isolated in a separate, clearable custom bucket (projectDiagnosticCollection).


Recommendations for Upstream

  1. Restore EndPosTable in nbjavac: We highly recommend filing a bug against the core apache/netbeans repository to reinstate the dummy EndPosTable patch in nbjavac for Java 22/23. Until this is fixed upstream, Lombok users running the latest NetBeans Language Server on modern JDKs will experience completely broken annotation processing.
  2. Empty Diagnostic Arrays on didClose: The NetBeans Language Server should be updated to actively send publishDiagnostics(uri, []) when it receives a didClose notification for a file, ensuring that the VS Code Problems panel cleans up gracefully when a user closes a broken file.

PR approval and merge checklist:

  1. Is this PR squashed?
  2. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  3. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

Comment threadvscode/package.json
Sign up for freeto 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.

2 participants

@Moataz-Aldawood@JaroslavTulach
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Implement Workspace Diagnostic Scanning (Issue 31) - #33

Open
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan
Open

Implement Workspace Diagnostic Scanning (Issue 31)#33
Moataz-Aldawood wants to merge 1 commit into
apache:masterfrom
Moataz-Aldawood:feature/workspace-scan

Conversation

@Moataz-Aldawood

@Moataz-AldawoodMoataz-Aldawood commented Aug 9, 2026

Copy link
Copy Markdown

Pull Request: Implement Workspace Diagnostic Scanning (Issue #31)

Overview

This PR introduces a much-requested feature: the ability to proactively scan an entire workspace for compilation errors and warnings without requiring the user to open every file manually. It fulfills Issue #31 and also addresses exclusion glob-patterns requested in Issue #19.


Changes & Features Introduced

  1. Workspace Scanning Configuration:

    • netbeans.autoScanWorkspace: A new boolean setting (default: false) that allows users to automatically trigger a full workspace diagnostic scan whenever they load a project.
    • netbeans.scanExclude: A new array configuration (default: ["**/node_modules/**", "**/target/**", "**/build/**"]) allowing users to define glob patterns for directories that should be skipped during the scan to save resources.
  2. New User Commands:

    • nbls.workspace.scan (Java: Scan Workspace for Diagnostics): Allows the user to manually trigger a background scan of all .java files in the workspace at any time. It includes a cancellable VS Code progress bar.
    • nbls.workspace.scan.clear (Java: Clear Workspace Diagnostics): A utility command to instantly clear all background scan results from the custom VS Code Problems panel collection.
  3. Background Scanner Logic (extension.ts):

    • Implemented doWorkspaceScan which batch processes files by invoking the backend nbls.get.diagnostics command in small chunks. This prevents overloading the LSP server with hundreds of simultaneous parsing requests.
    • Added specific client-side filtering to gracefully drop massive ExceptionInInitializerError stack traces caused by upstream Lombok incompatibilities.

Fixes

Critical Bug Fix in TextDocumentServiceImpl.java
While implementing the scanner, we discovered a major bug in the computeDiagnostics method inside the backend language server. Previously, when the server computed errors and hints simultaneously, the resulting result list was being overwritten rather than aggregated. This caused standard compilation errors to randomly disappear or be completely overwritten by simple code hints.

  • Fix: Refactored computeDiagnostics to use an ArrayList<> and .addAll() so that both ERRORS and HINTS are correctly merged and returned to the client in a single payload.

Challenges Encountered

Lombok Compatibility on master Branch:
During testing on the master branch, we encountered a significant challenge with Lombok throwing fatal java.lang.NoClassDefFoundError: Could not initialize class lombok.javac.Javac exceptions.

  • Investigation: We discovered this is an upstream regression in the apache/netbeans master branch. The NetBeans team recently updated the internal nbjavac compiler to Java 22/23 and unfortunately dropped the EndPosTable compatibility patch (which existed in NetBeans 21) that allowed Lombok to function on newer JDKs.
  • Resolution: Because this is an upstream compiler issue, we cannot fix it inside the VS Code extension wrapper. We implemented a temporary client-side filter in the scanner to prevent these massive, noisy stack traces from flooding the user's Problems panel, whilst continuing to report the valid Java cannot find symbol errors that result from the failed Lombok processing.

Native LSP Diagnostic Caching:
We encountered confusion regarding lingering diagnostics in the Problems panel after closing files. This is due to the native vscode-languageclient architecture where the backend server does not explicitly send empty arrays ([]) to clear diagnostics when files are closed. We solved this from the user's perspective by keeping our background scan results isolated in a separate, clearable custom bucket (projectDiagnosticCollection).


Recommendations for Upstream

  1. Restore EndPosTable in nbjavac: We highly recommend filing a bug against the core apache/netbeans repository to reinstate the dummy EndPosTable patch in nbjavac for Java 22/23. Until this is fixed upstream, Lombok users running the latest NetBeans Language Server on modern JDKs will experience completely broken annotation processing.
  2. Empty Diagnostic Arrays on didClose: The NetBeans Language Server should be updated to actively send publishDiagnostics(uri, []) when it receives a didClose notification for a file, ensuring that the VS Code Problems panel cleans up gracefully when a user closes a broken file.

PR approval and merge checklist:

  1. Is this PR squashed?
  2. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  3. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

Comment threadvscode/package.json
Sign up for freeto 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.

2 participants

@Moataz-Aldawood@JaroslavTulach