Skip to content

perf(coverage): single-pass file scan + native regex in extract_functions - #644

Merged
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations
Apr 29, 2026
Merged

perf(coverage): single-pass file scan + native regex in extract_functions#644
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations

Conversation

@Chemaclass

@ChemaclassChemaclass commented Apr 29, 2026

Copy link
Copy Markdown
Member

Background

Follow-up to #636 / #643. The previous PR collapsed the seven grep subshells inside bashunit::coverage::is_executable_line into one. Three optimisation suggestions from @objctp's review remained open:

  1. report_lcov re-scanned the coverage data file once per source line via get_line_hits (O(lines × data)).
  2. report_text, report_lcov, report_html independently recomputed the same per-file executable + hit counts, each doing two extra file scans.
  3. extract_functions spawned echo | sed / echo | grep subshells per line.

Changes

  • New bashunit::coverage::compute_file_coverage <file> performs a single source-file pass, resolving hit counts via the already-single-pass get_all_line_hits helper. Returns executable:hit.
  • get_file_stats, report_text, report_html now route through compute_file_coverage so per-file executable + hit counts are computed once instead of via two independent file scans plus repeated coverage-data greps.
  • report_lcov reads get_all_line_hits once into a sparse indexed array and emits DA: entries while tallying executable + hit counts in the same single pass — no more per-line grep over the coverage data file.
  • extract_functions replaces echo | sed -nE with bash native [[ =~ ]] + BASH_REMATCH, and replaces the per-line echo | grep -c '\\{' / '\\}' subshells with reuse of the already-computed brace-count parameter expansions.

…ions
Address remaining review comments from #636:
- Add bashunit::coverage::compute_file_coverage that scans each source
file once and resolves hits via the existing single-pass
get_all_line_hits helper, removing the O(lines x data) re-scan from
report_lcov.
- Route get_file_stats, report_text and report_html through the new
helper so per-file executable + hit counts are computed once instead
of via two independent file scans plus repeated coverage-data greps.
- Replace echo | sed and echo | grep subshells in extract_functions
with bash native regex matching (BASH_REMATCH) and parameter
expansion-based brace counting.
@ChemaclassChemaclass self-assigned this Apr 29, 2026
@ChemaclassChemaclass added the refactoring Refactoring or cleaning related label Apr 29, 2026
@Chemaclass
Chemaclass merged commit 6afbded into mainApr 29, 2026
30 checks passed
@Chemaclass
Chemaclass deleted the perf/636-coverage-followup-optimizations branch April 29, 2026 10:16
@objctpobjctp mentioned this pull request Apr 30, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoringRefactoring or cleaning related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
perf(coverage): single-pass file scan + native regex in extract_functions by Chemaclass · Pull Request #644 · TypedDevs/bashunit · GitHub
Skip to content

perf(coverage): single-pass file scan + native regex in extract_functions - #644

Merged
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations
Apr 29, 2026
Merged

perf(coverage): single-pass file scan + native regex in extract_functions#644
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations

Conversation

@Chemaclass

@ChemaclassChemaclass commented Apr 29, 2026

Copy link
Copy Markdown
Member

Background

Follow-up to #636 / #643. The previous PR collapsed the seven grep subshells inside bashunit::coverage::is_executable_line into one. Three optimisation suggestions from @objctp's review remained open:

  1. report_lcov re-scanned the coverage data file once per source line via get_line_hits (O(lines × data)).
  2. report_text, report_lcov, report_html independently recomputed the same per-file executable + hit counts, each doing two extra file scans.
  3. extract_functions spawned echo | sed / echo | grep subshells per line.

Changes

  • New bashunit::coverage::compute_file_coverage <file> performs a single source-file pass, resolving hit counts via the already-single-pass get_all_line_hits helper. Returns executable:hit.
  • get_file_stats, report_text, report_html now route through compute_file_coverage so per-file executable + hit counts are computed once instead of via two independent file scans plus repeated coverage-data greps.
  • report_lcov reads get_all_line_hits once into a sparse indexed array and emits DA: entries while tallying executable + hit counts in the same single pass — no more per-line grep over the coverage data file.
  • extract_functions replaces echo | sed -nE with bash native [[ =~ ]] + BASH_REMATCH, and replaces the per-line echo | grep -c '\\{' / '\\}' subshells with reuse of the already-computed brace-count parameter expansions.

…ions
Address remaining review comments from #636:
- Add bashunit::coverage::compute_file_coverage that scans each source
file once and resolves hits via the existing single-pass
get_all_line_hits helper, removing the O(lines x data) re-scan from
report_lcov.
- Route get_file_stats, report_text and report_html through the new
helper so per-file executable + hit counts are computed once instead
of via two independent file scans plus repeated coverage-data greps.
- Replace echo | sed and echo | grep subshells in extract_functions
with bash native regex matching (BASH_REMATCH) and parameter
expansion-based brace counting.
@ChemaclassChemaclass self-assigned this Apr 29, 2026
@ChemaclassChemaclass added the refactoring Refactoring or cleaning related label Apr 29, 2026
@Chemaclass
Chemaclass merged commit 6afbded into mainApr 29, 2026
30 checks passed
@Chemaclass
Chemaclass deleted the perf/636-coverage-followup-optimizations branch April 29, 2026 10:16
@objctpobjctp mentioned this pull request Apr 30, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoringRefactoring or cleaning related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' perf(coverage): single-pass file scan + native regex in extract_functions by Chemaclass · Pull Request #644 · TypedDevs/bashunit · GitHub
Skip to content

perf(coverage): single-pass file scan + native regex in extract_functions - #644

Merged
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations
Apr 29, 2026
Merged

perf(coverage): single-pass file scan + native regex in extract_functions#644
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations

Conversation

@Chemaclass

@ChemaclassChemaclass commented Apr 29, 2026

Copy link
Copy Markdown
Member

Background

Follow-up to #636 / #643. The previous PR collapsed the seven grep subshells inside bashunit::coverage::is_executable_line into one. Three optimisation suggestions from @objctp's review remained open:

  1. report_lcov re-scanned the coverage data file once per source line via get_line_hits (O(lines × data)).
  2. report_text, report_lcov, report_html independently recomputed the same per-file executable + hit counts, each doing two extra file scans.
  3. extract_functions spawned echo | sed / echo | grep subshells per line.

Changes

  • New bashunit::coverage::compute_file_coverage <file> performs a single source-file pass, resolving hit counts via the already-single-pass get_all_line_hits helper. Returns executable:hit.
  • get_file_stats, report_text, report_html now route through compute_file_coverage so per-file executable + hit counts are computed once instead of via two independent file scans plus repeated coverage-data greps.
  • report_lcov reads get_all_line_hits once into a sparse indexed array and emits DA: entries while tallying executable + hit counts in the same single pass — no more per-line grep over the coverage data file.
  • extract_functions replaces echo | sed -nE with bash native [[ =~ ]] + BASH_REMATCH, and replaces the per-line echo | grep -c '\\{' / '\\}' subshells with reuse of the already-computed brace-count parameter expansions.

…ions
Address remaining review comments from #636:
- Add bashunit::coverage::compute_file_coverage that scans each source
file once and resolves hits via the existing single-pass
get_all_line_hits helper, removing the O(lines x data) re-scan from
report_lcov.
- Route get_file_stats, report_text and report_html through the new
helper so per-file executable + hit counts are computed once instead
of via two independent file scans plus repeated coverage-data greps.
- Replace echo | sed and echo | grep subshells in extract_functions
with bash native regex matching (BASH_REMATCH) and parameter
expansion-based brace counting.
@ChemaclassChemaclass self-assigned this Apr 29, 2026
@ChemaclassChemaclass added the refactoring Refactoring or cleaning related label Apr 29, 2026
@Chemaclass
Chemaclass merged commit 6afbded into mainApr 29, 2026
30 checks passed
@Chemaclass
Chemaclass deleted the perf/636-coverage-followup-optimizations branch April 29, 2026 10:16
@objctpobjctp mentioned this pull request Apr 30, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoringRefactoring or cleaning related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

perf(coverage): single-pass file scan + native regex in extract_functions - #644

Merged
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations
Apr 29, 2026
Merged

perf(coverage): single-pass file scan + native regex in extract_functions#644
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations

Conversation

@Chemaclass

@ChemaclassChemaclass commented Apr 29, 2026

Copy link
Copy Markdown
Member

Background

Follow-up to #636 / #643. The previous PR collapsed the seven grep subshells inside bashunit::coverage::is_executable_line into one. Three optimisation suggestions from @objctp's review remained open:

  1. report_lcov re-scanned the coverage data file once per source line via get_line_hits (O(lines × data)).
  2. report_text, report_lcov, report_html independently recomputed the same per-file executable + hit counts, each doing two extra file scans.
  3. extract_functions spawned echo | sed / echo | grep subshells per line.

Changes

  • New bashunit::coverage::compute_file_coverage <file> performs a single source-file pass, resolving hit counts via the already-single-pass get_all_line_hits helper. Returns executable:hit.
  • get_file_stats, report_text, report_html now route through compute_file_coverage so per-file executable + hit counts are computed once instead of via two independent file scans plus repeated coverage-data greps.
  • report_lcov reads get_all_line_hits once into a sparse indexed array and emits DA: entries while tallying executable + hit counts in the same single pass — no more per-line grep over the coverage data file.
  • extract_functions replaces echo | sed -nE with bash native [[ =~ ]] + BASH_REMATCH, and replaces the per-line echo | grep -c '\\{' / '\\}' subshells with reuse of the already-computed brace-count parameter expansions.

…ions
Address remaining review comments from #636:
- Add bashunit::coverage::compute_file_coverage that scans each source
file once and resolves hits via the existing single-pass
get_all_line_hits helper, removing the O(lines x data) re-scan from
report_lcov.
- Route get_file_stats, report_text and report_html through the new
helper so per-file executable + hit counts are computed once instead
of via two independent file scans plus repeated coverage-data greps.
- Replace echo | sed and echo | grep subshells in extract_functions
with bash native regex matching (BASH_REMATCH) and parameter
expansion-based brace counting.
@ChemaclassChemaclass self-assigned this Apr 29, 2026
@ChemaclassChemaclass added the refactoring Refactoring or cleaning related label Apr 29, 2026
@Chemaclass
Chemaclass merged commit 6afbded into mainApr 29, 2026
30 checks passed
@Chemaclass
Chemaclass deleted the perf/636-coverage-followup-optimizations branch April 29, 2026 10:16
@objctpobjctp mentioned this pull request Apr 30, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoringRefactoring or cleaning related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

perf(coverage): single-pass file scan + native regex in extract_functions - #644

Merged
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations
Apr 29, 2026
Merged

perf(coverage): single-pass file scan + native regex in extract_functions#644
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations

Conversation

@Chemaclass

@ChemaclassChemaclass commented Apr 29, 2026

Copy link
Copy Markdown
Member

Background

Follow-up to #636 / #643. The previous PR collapsed the seven grep subshells inside bashunit::coverage::is_executable_line into one. Three optimisation suggestions from @objctp's review remained open:

  1. report_lcov re-scanned the coverage data file once per source line via get_line_hits (O(lines × data)).
  2. report_text, report_lcov, report_html independently recomputed the same per-file executable + hit counts, each doing two extra file scans.
  3. extract_functions spawned echo | sed / echo | grep subshells per line.

Changes

  • New bashunit::coverage::compute_file_coverage <file> performs a single source-file pass, resolving hit counts via the already-single-pass get_all_line_hits helper. Returns executable:hit.
  • get_file_stats, report_text, report_html now route through compute_file_coverage so per-file executable + hit counts are computed once instead of via two independent file scans plus repeated coverage-data greps.
  • report_lcov reads get_all_line_hits once into a sparse indexed array and emits DA: entries while tallying executable + hit counts in the same single pass — no more per-line grep over the coverage data file.
  • extract_functions replaces echo | sed -nE with bash native [[ =~ ]] + BASH_REMATCH, and replaces the per-line echo | grep -c '\\{' / '\\}' subshells with reuse of the already-computed brace-count parameter expansions.

…ions
Address remaining review comments from #636:
- Add bashunit::coverage::compute_file_coverage that scans each source
file once and resolves hits via the existing single-pass
get_all_line_hits helper, removing the O(lines x data) re-scan from
report_lcov.
- Route get_file_stats, report_text and report_html through the new
helper so per-file executable + hit counts are computed once instead
of via two independent file scans plus repeated coverage-data greps.
- Replace echo | sed and echo | grep subshells in extract_functions
with bash native regex matching (BASH_REMATCH) and parameter
expansion-based brace counting.
@ChemaclassChemaclass self-assigned this Apr 29, 2026
@ChemaclassChemaclass added the refactoring Refactoring or cleaning related label Apr 29, 2026
@Chemaclass
Chemaclass merged commit 6afbded into mainApr 29, 2026
30 checks passed
@Chemaclass
Chemaclass deleted the perf/636-coverage-followup-optimizations branch April 29, 2026 10:16
@objctpobjctp mentioned this pull request Apr 30, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoringRefactoring or cleaning related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' perf(coverage): single-pass file scan + native regex in extract_functions by Chemaclass · Pull Request #644 · TypedDevs/bashunit · GitHub
Skip to content

perf(coverage): single-pass file scan + native regex in extract_functions - #644

Merged
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations
Apr 29, 2026
Merged

perf(coverage): single-pass file scan + native regex in extract_functions#644
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations

Conversation

@Chemaclass

@ChemaclassChemaclass commented Apr 29, 2026

Copy link
Copy Markdown
Member

Background

Follow-up to #636 / #643. The previous PR collapsed the seven grep subshells inside bashunit::coverage::is_executable_line into one. Three optimisation suggestions from @objctp's review remained open:

  1. report_lcov re-scanned the coverage data file once per source line via get_line_hits (O(lines × data)).
  2. report_text, report_lcov, report_html independently recomputed the same per-file executable + hit counts, each doing two extra file scans.
  3. extract_functions spawned echo | sed / echo | grep subshells per line.

Changes

  • New bashunit::coverage::compute_file_coverage <file> performs a single source-file pass, resolving hit counts via the already-single-pass get_all_line_hits helper. Returns executable:hit.
  • get_file_stats, report_text, report_html now route through compute_file_coverage so per-file executable + hit counts are computed once instead of via two independent file scans plus repeated coverage-data greps.
  • report_lcov reads get_all_line_hits once into a sparse indexed array and emits DA: entries while tallying executable + hit counts in the same single pass — no more per-line grep over the coverage data file.
  • extract_functions replaces echo | sed -nE with bash native [[ =~ ]] + BASH_REMATCH, and replaces the per-line echo | grep -c '\\{' / '\\}' subshells with reuse of the already-computed brace-count parameter expansions.

…ions
Address remaining review comments from #636:
- Add bashunit::coverage::compute_file_coverage that scans each source
file once and resolves hits via the existing single-pass
get_all_line_hits helper, removing the O(lines x data) re-scan from
report_lcov.
- Route get_file_stats, report_text and report_html through the new
helper so per-file executable + hit counts are computed once instead
of via two independent file scans plus repeated coverage-data greps.
- Replace echo | sed and echo | grep subshells in extract_functions
with bash native regex matching (BASH_REMATCH) and parameter
expansion-based brace counting.
@ChemaclassChemaclass self-assigned this Apr 29, 2026
@ChemaclassChemaclass added the refactoring Refactoring or cleaning related label Apr 29, 2026
@Chemaclass
Chemaclass merged commit 6afbded into mainApr 29, 2026
30 checks passed
@Chemaclass
Chemaclass deleted the perf/636-coverage-followup-optimizations branch April 29, 2026 10:16
@objctpobjctp mentioned this pull request Apr 30, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoringRefactoring or cleaning related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' perf(coverage): single-pass file scan + native regex in extract_functions by Chemaclass · Pull Request #644 · TypedDevs/bashunit · GitHub
Skip to content

perf(coverage): single-pass file scan + native regex in extract_functions - #644

Merged
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations
Apr 29, 2026
Merged

perf(coverage): single-pass file scan + native regex in extract_functions#644
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations

Conversation

@Chemaclass

@ChemaclassChemaclass commented Apr 29, 2026

Copy link
Copy Markdown
Member

Background

Follow-up to #636 / #643. The previous PR collapsed the seven grep subshells inside bashunit::coverage::is_executable_line into one. Three optimisation suggestions from @objctp's review remained open:

  1. report_lcov re-scanned the coverage data file once per source line via get_line_hits (O(lines × data)).
  2. report_text, report_lcov, report_html independently recomputed the same per-file executable + hit counts, each doing two extra file scans.
  3. extract_functions spawned echo | sed / echo | grep subshells per line.

Changes

  • New bashunit::coverage::compute_file_coverage <file> performs a single source-file pass, resolving hit counts via the already-single-pass get_all_line_hits helper. Returns executable:hit.
  • get_file_stats, report_text, report_html now route through compute_file_coverage so per-file executable + hit counts are computed once instead of via two independent file scans plus repeated coverage-data greps.
  • report_lcov reads get_all_line_hits once into a sparse indexed array and emits DA: entries while tallying executable + hit counts in the same single pass — no more per-line grep over the coverage data file.
  • extract_functions replaces echo | sed -nE with bash native [[ =~ ]] + BASH_REMATCH, and replaces the per-line echo | grep -c '\\{' / '\\}' subshells with reuse of the already-computed brace-count parameter expansions.

…ions
Address remaining review comments from #636:
- Add bashunit::coverage::compute_file_coverage that scans each source
file once and resolves hits via the existing single-pass
get_all_line_hits helper, removing the O(lines x data) re-scan from
report_lcov.
- Route get_file_stats, report_text and report_html through the new
helper so per-file executable + hit counts are computed once instead
of via two independent file scans plus repeated coverage-data greps.
- Replace echo | sed and echo | grep subshells in extract_functions
with bash native regex matching (BASH_REMATCH) and parameter
expansion-based brace counting.
@ChemaclassChemaclass self-assigned this Apr 29, 2026
@ChemaclassChemaclass added the refactoring Refactoring or cleaning related label Apr 29, 2026
@Chemaclass
Chemaclass merged commit 6afbded into mainApr 29, 2026
30 checks passed
@Chemaclass
Chemaclass deleted the perf/636-coverage-followup-optimizations branch April 29, 2026 10:16
@objctpobjctp mentioned this pull request Apr 30, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoringRefactoring or cleaning related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

perf(coverage): single-pass file scan + native regex in extract_functions - #644

Merged
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations
Apr 29, 2026
Merged

perf(coverage): single-pass file scan + native regex in extract_functions#644
Chemaclass merged 2 commits into
mainfrom
perf/636-coverage-followup-optimizations

Conversation

@Chemaclass

@ChemaclassChemaclass commented Apr 29, 2026

Copy link
Copy Markdown
Member

Background

Follow-up to #636 / #643. The previous PR collapsed the seven grep subshells inside bashunit::coverage::is_executable_line into one. Three optimisation suggestions from @objctp's review remained open:

  1. report_lcov re-scanned the coverage data file once per source line via get_line_hits (O(lines × data)).
  2. report_text, report_lcov, report_html independently recomputed the same per-file executable + hit counts, each doing two extra file scans.
  3. extract_functions spawned echo | sed / echo | grep subshells per line.

Changes

  • New bashunit::coverage::compute_file_coverage <file> performs a single source-file pass, resolving hit counts via the already-single-pass get_all_line_hits helper. Returns executable:hit.
  • get_file_stats, report_text, report_html now route through compute_file_coverage so per-file executable + hit counts are computed once instead of via two independent file scans plus repeated coverage-data greps.
  • report_lcov reads get_all_line_hits once into a sparse indexed array and emits DA: entries while tallying executable + hit counts in the same single pass — no more per-line grep over the coverage data file.
  • extract_functions replaces echo | sed -nE with bash native [[ =~ ]] + BASH_REMATCH, and replaces the per-line echo | grep -c '\\{' / '\\}' subshells with reuse of the already-computed brace-count parameter expansions.

…ions
Address remaining review comments from #636:
- Add bashunit::coverage::compute_file_coverage that scans each source
file once and resolves hits via the existing single-pass
get_all_line_hits helper, removing the O(lines x data) re-scan from
report_lcov.
- Route get_file_stats, report_text and report_html through the new
helper so per-file executable + hit counts are computed once instead
of via two independent file scans plus repeated coverage-data greps.
- Replace echo | sed and echo | grep subshells in extract_functions
with bash native regex matching (BASH_REMATCH) and parameter
expansion-based brace counting.
@ChemaclassChemaclass self-assigned this Apr 29, 2026
@ChemaclassChemaclass added the refactoring Refactoring or cleaning related label Apr 29, 2026
@Chemaclass
Chemaclass merged commit 6afbded into mainApr 29, 2026
30 checks passed
@Chemaclass
Chemaclass deleted the perf/636-coverage-followup-optimizations branch April 29, 2026 10:16
@objctpobjctp mentioned this pull request Apr 30, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoringRefactoring or cleaning related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Chemaclass