Skip to content

fix: use ready futures for synchronous trait handlers - #111

Closed
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers
Closed

fix: use ready futures for synchronous trait handlers#111
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers

Conversation

@lucarlig

@lucarliglucarlig commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • replace nine no-await async trait implementations with std::future::Ready
  • keep clippy::unused_async_trait_impl enabled through the workspace pedantic lint group

This is the bottom PR beneath #107 and #109.

Why

Clippy's unused_async_trait_impl documentation recommends returning std::future::ready when an async trait implementation contains no .await. This avoids generating an async state machine for work that is entirely synchronous.

The change covers all nine affected functions: one production plugin handler and eight test or mock handlers. Their results are computed when the method is called and returned through Ready; no lint suppression remains.

Verification

  • Rust 1.98 workspace Clippy with all targets, all features, and warnings denied
  • Rust 1.96.1 workspace Clippy with all targets, all features, and warnings denied
  • workspace nextest: 224 passed, 5 skipped
  • repository commit hooks

@lucarlig
lucarlig marked this pull request as ready for review August 21, 2026 16:47
@lucarliglucarlig changed the title fix: avoid unused async trait handlerschore: allow unused async trait handlersAug 24, 2026
@lucarliglucarlig changed the title chore: allow unused async trait handlersfix: use ready futures for synchronous trait handlersAug 24, 2026
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/fix-unused-async-handlers branch from 4ab6dc6 to 655bffbCompareAugust 24, 2026 14:29

@dawid-nowakdawid-nowak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why are we returning a future if the interface is not async?
Or what am I missing?

_ctx: &mut PluginContext,
) -> PluginResult<MessagePayload> {
) -> impl std::future::Future<Output = PluginResult<MessagePayload>> {
let scan = self.scan_payload(payload);

@dawid-nowakdawid-nowakAug 24, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How about just adding and keeping the interface as it was.

Either adding :
async {}.await;
or
#[allow(clippy::unused_async_trait_impl)]

@dawid-nowak

Copy link
Copy Markdown
Contributor

I will close it and fix these changes as part of #113

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

@lucarlig@dawid-nowak
, '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" + '
fix: use ready futures for synchronous trait handlers by lucarlig · Pull Request #111 · contextforge-org/contextforge-data-plane · GitHub
Skip to content

fix: use ready futures for synchronous trait handlers - #111

Closed
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers
Closed

fix: use ready futures for synchronous trait handlers#111
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers

Conversation

@lucarlig

@lucarliglucarlig commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • replace nine no-await async trait implementations with std::future::Ready
  • keep clippy::unused_async_trait_impl enabled through the workspace pedantic lint group

This is the bottom PR beneath #107 and #109.

Why

Clippy's unused_async_trait_impl documentation recommends returning std::future::ready when an async trait implementation contains no .await. This avoids generating an async state machine for work that is entirely synchronous.

The change covers all nine affected functions: one production plugin handler and eight test or mock handlers. Their results are computed when the method is called and returned through Ready; no lint suppression remains.

Verification

  • Rust 1.98 workspace Clippy with all targets, all features, and warnings denied
  • Rust 1.96.1 workspace Clippy with all targets, all features, and warnings denied
  • workspace nextest: 224 passed, 5 skipped
  • repository commit hooks

@lucarlig
lucarlig marked this pull request as ready for review August 21, 2026 16:47
@lucarliglucarlig changed the title fix: avoid unused async trait handlerschore: allow unused async trait handlersAug 24, 2026
@lucarliglucarlig changed the title chore: allow unused async trait handlersfix: use ready futures for synchronous trait handlersAug 24, 2026
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/fix-unused-async-handlers branch from 4ab6dc6 to 655bffbCompareAugust 24, 2026 14:29

@dawid-nowakdawid-nowak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why are we returning a future if the interface is not async?
Or what am I missing?

_ctx: &mut PluginContext,
) -> PluginResult<MessagePayload> {
) -> impl std::future::Future<Output = PluginResult<MessagePayload>> {
let scan = self.scan_payload(payload);

@dawid-nowakdawid-nowakAug 24, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How about just adding and keeping the interface as it was.

Either adding :
async {}.await;
or
#[allow(clippy::unused_async_trait_impl)]

@dawid-nowak

Copy link
Copy Markdown
Contributor

I will close it and fix these changes as part of #113

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

@lucarlig@dawid-nowak
, '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('^' + ".*" + ' fix: use ready futures for synchronous trait handlers by lucarlig · Pull Request #111 · contextforge-org/contextforge-data-plane · GitHub
Skip to content

fix: use ready futures for synchronous trait handlers - #111

Closed
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers
Closed

fix: use ready futures for synchronous trait handlers#111
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers

Conversation

@lucarlig

@lucarliglucarlig commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • replace nine no-await async trait implementations with std::future::Ready
  • keep clippy::unused_async_trait_impl enabled through the workspace pedantic lint group

This is the bottom PR beneath #107 and #109.

Why

Clippy's unused_async_trait_impl documentation recommends returning std::future::ready when an async trait implementation contains no .await. This avoids generating an async state machine for work that is entirely synchronous.

The change covers all nine affected functions: one production plugin handler and eight test or mock handlers. Their results are computed when the method is called and returned through Ready; no lint suppression remains.

Verification

  • Rust 1.98 workspace Clippy with all targets, all features, and warnings denied
  • Rust 1.96.1 workspace Clippy with all targets, all features, and warnings denied
  • workspace nextest: 224 passed, 5 skipped
  • repository commit hooks

@lucarlig
lucarlig marked this pull request as ready for review August 21, 2026 16:47
@lucarliglucarlig changed the title fix: avoid unused async trait handlerschore: allow unused async trait handlersAug 24, 2026
@lucarliglucarlig changed the title chore: allow unused async trait handlersfix: use ready futures for synchronous trait handlersAug 24, 2026
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/fix-unused-async-handlers branch from 4ab6dc6 to 655bffbCompareAugust 24, 2026 14:29

@dawid-nowakdawid-nowak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why are we returning a future if the interface is not async?
Or what am I missing?

_ctx: &mut PluginContext,
) -> PluginResult<MessagePayload> {
) -> impl std::future::Future<Output = PluginResult<MessagePayload>> {
let scan = self.scan_payload(payload);

@dawid-nowakdawid-nowakAug 24, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How about just adding and keeping the interface as it was.

Either adding :
async {}.await;
or
#[allow(clippy::unused_async_trait_impl)]

@dawid-nowak

Copy link
Copy Markdown
Contributor

I will close it and fix these changes as part of #113

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

@lucarlig@dawid-nowak
, '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('^' + ".*" + ' fix: use ready futures for synchronous trait handlers by lucarlig · Pull Request #111 · contextforge-org/contextforge-data-plane · GitHub
Skip to content

fix: use ready futures for synchronous trait handlers - #111

Closed
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers
Closed

fix: use ready futures for synchronous trait handlers#111
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers

Conversation

@lucarlig

@lucarliglucarlig commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • replace nine no-await async trait implementations with std::future::Ready
  • keep clippy::unused_async_trait_impl enabled through the workspace pedantic lint group

This is the bottom PR beneath #107 and #109.

Why

Clippy's unused_async_trait_impl documentation recommends returning std::future::ready when an async trait implementation contains no .await. This avoids generating an async state machine for work that is entirely synchronous.

The change covers all nine affected functions: one production plugin handler and eight test or mock handlers. Their results are computed when the method is called and returned through Ready; no lint suppression remains.

Verification

  • Rust 1.98 workspace Clippy with all targets, all features, and warnings denied
  • Rust 1.96.1 workspace Clippy with all targets, all features, and warnings denied
  • workspace nextest: 224 passed, 5 skipped
  • repository commit hooks

@lucarlig
lucarlig marked this pull request as ready for review August 21, 2026 16:47
@lucarliglucarlig changed the title fix: avoid unused async trait handlerschore: allow unused async trait handlersAug 24, 2026
@lucarliglucarlig changed the title chore: allow unused async trait handlersfix: use ready futures for synchronous trait handlersAug 24, 2026
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/fix-unused-async-handlers branch from 4ab6dc6 to 655bffbCompareAugust 24, 2026 14:29

@dawid-nowakdawid-nowak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why are we returning a future if the interface is not async?
Or what am I missing?

_ctx: &mut PluginContext,
) -> PluginResult<MessagePayload> {
) -> impl std::future::Future<Output = PluginResult<MessagePayload>> {
let scan = self.scan_payload(payload);

@dawid-nowakdawid-nowakAug 24, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How about just adding and keeping the interface as it was.

Either adding :
async {}.await;
or
#[allow(clippy::unused_async_trait_impl)]

@dawid-nowak

Copy link
Copy Markdown
Contributor

I will close it and fix these changes as part of #113

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

@lucarlig@dawid-nowak
, '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" + ' fix: use ready futures for synchronous trait handlers by lucarlig · Pull Request #111 · contextforge-org/contextforge-data-plane · GitHub
Skip to content

fix: use ready futures for synchronous trait handlers - #111

Closed
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers
Closed

fix: use ready futures for synchronous trait handlers#111
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers

Conversation

@lucarlig

@lucarliglucarlig commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • replace nine no-await async trait implementations with std::future::Ready
  • keep clippy::unused_async_trait_impl enabled through the workspace pedantic lint group

This is the bottom PR beneath #107 and #109.

Why

Clippy's unused_async_trait_impl documentation recommends returning std::future::ready when an async trait implementation contains no .await. This avoids generating an async state machine for work that is entirely synchronous.

The change covers all nine affected functions: one production plugin handler and eight test or mock handlers. Their results are computed when the method is called and returned through Ready; no lint suppression remains.

Verification

  • Rust 1.98 workspace Clippy with all targets, all features, and warnings denied
  • Rust 1.96.1 workspace Clippy with all targets, all features, and warnings denied
  • workspace nextest: 224 passed, 5 skipped
  • repository commit hooks

@lucarlig
lucarlig marked this pull request as ready for review August 21, 2026 16:47
@lucarliglucarlig changed the title fix: avoid unused async trait handlerschore: allow unused async trait handlersAug 24, 2026
@lucarliglucarlig changed the title chore: allow unused async trait handlersfix: use ready futures for synchronous trait handlersAug 24, 2026
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/fix-unused-async-handlers branch from 4ab6dc6 to 655bffbCompareAugust 24, 2026 14:29

@dawid-nowakdawid-nowak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why are we returning a future if the interface is not async?
Or what am I missing?

_ctx: &mut PluginContext,
) -> PluginResult<MessagePayload> {
) -> impl std::future::Future<Output = PluginResult<MessagePayload>> {
let scan = self.scan_payload(payload);

@dawid-nowakdawid-nowakAug 24, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How about just adding and keeping the interface as it was.

Either adding :
async {}.await;
or
#[allow(clippy::unused_async_trait_impl)]

@dawid-nowak

Copy link
Copy Markdown
Contributor

I will close it and fix these changes as part of #113

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

@lucarlig@dawid-nowak
, '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('^' + ".*" + ' fix: use ready futures for synchronous trait handlers by lucarlig · Pull Request #111 · contextforge-org/contextforge-data-plane · GitHub
Skip to content

fix: use ready futures for synchronous trait handlers - #111

Closed
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers
Closed

fix: use ready futures for synchronous trait handlers#111
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers

Conversation

@lucarlig

@lucarliglucarlig commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • replace nine no-await async trait implementations with std::future::Ready
  • keep clippy::unused_async_trait_impl enabled through the workspace pedantic lint group

This is the bottom PR beneath #107 and #109.

Why

Clippy's unused_async_trait_impl documentation recommends returning std::future::ready when an async trait implementation contains no .await. This avoids generating an async state machine for work that is entirely synchronous.

The change covers all nine affected functions: one production plugin handler and eight test or mock handlers. Their results are computed when the method is called and returned through Ready; no lint suppression remains.

Verification

  • Rust 1.98 workspace Clippy with all targets, all features, and warnings denied
  • Rust 1.96.1 workspace Clippy with all targets, all features, and warnings denied
  • workspace nextest: 224 passed, 5 skipped
  • repository commit hooks

@lucarlig
lucarlig marked this pull request as ready for review August 21, 2026 16:47
@lucarliglucarlig changed the title fix: avoid unused async trait handlerschore: allow unused async trait handlersAug 24, 2026
@lucarliglucarlig changed the title chore: allow unused async trait handlersfix: use ready futures for synchronous trait handlersAug 24, 2026
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/fix-unused-async-handlers branch from 4ab6dc6 to 655bffbCompareAugust 24, 2026 14:29

@dawid-nowakdawid-nowak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why are we returning a future if the interface is not async?
Or what am I missing?

_ctx: &mut PluginContext,
) -> PluginResult<MessagePayload> {
) -> impl std::future::Future<Output = PluginResult<MessagePayload>> {
let scan = self.scan_payload(payload);

@dawid-nowakdawid-nowakAug 24, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How about just adding and keeping the interface as it was.

Either adding :
async {}.await;
or
#[allow(clippy::unused_async_trait_impl)]

@dawid-nowak

Copy link
Copy Markdown
Contributor

I will close it and fix these changes as part of #113

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

@lucarlig@dawid-nowak
, '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); } })(); })(); fix: use ready futures for synchronous trait handlers by lucarlig · Pull Request #111 · contextforge-org/contextforge-data-plane · GitHub
Skip to content

fix: use ready futures for synchronous trait handlers - #111

Closed
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers
Closed

fix: use ready futures for synchronous trait handlers#111
lucarlig wants to merge 1 commit into
mainfrom
user/luca/fix-unused-async-handlers

Conversation

@lucarlig

@lucarliglucarlig commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • replace nine no-await async trait implementations with std::future::Ready
  • keep clippy::unused_async_trait_impl enabled through the workspace pedantic lint group

This is the bottom PR beneath #107 and #109.

Why

Clippy's unused_async_trait_impl documentation recommends returning std::future::ready when an async trait implementation contains no .await. This avoids generating an async state machine for work that is entirely synchronous.

The change covers all nine affected functions: one production plugin handler and eight test or mock handlers. Their results are computed when the method is called and returned through Ready; no lint suppression remains.

Verification

  • Rust 1.98 workspace Clippy with all targets, all features, and warnings denied
  • Rust 1.96.1 workspace Clippy with all targets, all features, and warnings denied
  • workspace nextest: 224 passed, 5 skipped
  • repository commit hooks

@lucarlig
lucarlig marked this pull request as ready for review August 21, 2026 16:47
@lucarliglucarlig changed the title fix: avoid unused async trait handlerschore: allow unused async trait handlersAug 24, 2026
@lucarliglucarlig changed the title chore: allow unused async trait handlersfix: use ready futures for synchronous trait handlersAug 24, 2026
Signed-off-by: lucarlig <luca.carlig@ibm.com>
@lucarlig
lucarligforce-pushed the user/luca/fix-unused-async-handlers branch from 4ab6dc6 to 655bffbCompareAugust 24, 2026 14:29

@dawid-nowakdawid-nowak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why are we returning a future if the interface is not async?
Or what am I missing?

_ctx: &mut PluginContext,
) -> PluginResult<MessagePayload> {
) -> impl std::future::Future<Output = PluginResult<MessagePayload>> {
let scan = self.scan_payload(payload);

@dawid-nowakdawid-nowakAug 24, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

How about just adding and keeping the interface as it was.

Either adding :
async {}.await;
or
#[allow(clippy::unused_async_trait_impl)]

@dawid-nowak

Copy link
Copy Markdown
Contributor

I will close it and fix these changes as part of #113

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

@lucarlig@dawid-nowak