') + ')', '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('^' + ".*" + ', '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" + ', '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('^' + ".*" + ', '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); } })(); })(); chore: raise prqlc MSRV to Rust 1.85 by max-sixty · Pull Request #6246 · PRQL/prql · GitHub
Skip to content

chore: raise prqlc MSRV to Rust 1.85 - #6246

Merged
max-sixty merged 5 commits into
mainfrom
codex/raise-prqlc-msrv
Aug 29, 2026
Merged

chore: raise prqlc MSRV to Rust 1.85#6246
max-sixty merged 5 commits into
mainfrom
codex/raise-prqlc-msrv

Conversation

@max-sixty

@max-sixtymax-sixty commented Aug 29, 2026

Copy link
Copy Markdown
Member

Raise the published PRQL compiler MSRV from Rust 1.81 to 1.85 in both the workspace package metadata and cargo-msrv compatibility metadata.

This lets the unpublished mdBook tooling move from 0.5.2 to 0.5.4. The regenerated workspace lockfile selects indexmap 2.14.1, which is also in prqlc's dependency graph and declares Rust 1.85 as its minimum. Because mdbook-prql does not inherit the workspace MSRV, this is a deliberate public support-floor change rather than an MSRV declaration for the book tool.

The direct anyhow, serde_json, and regex minimums now satisfy mdBook 0.5.4's requirements. The lockfile and shell-completion snapshots also align with clap_complete 4.6.9, which becomes eligible in the direct-minimum resolver at the new workspace MSRV, without re-resolving unrelated Windows dependency edges. The temporary Dependabot ignores added in #6240 are removed.

The change also applies the mechanical Clippy improvements required by the repository's Rust 1.97 CI, including Option::is_none_or, which is available at the new support floor.

Verified with cargo msrv verify, cargo +nightly-2025-11-10 minimal-versions test --direct, cargo +1.97.1 clippy --all-targets --no-default-features --features=default -- -D warnings, task prqlc:pull-request, and cargo +1.97.1 test -p mdbook-prql --locked.

This was written by Codex on behalf of @max-sixty

@prql-botprql-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

test-deps-min-versions is red on this commit, and it's caused by the mdBook bump rather than being flaky — main's last tests run was green shortly before this one started. It's in check-ok-to-merge's needs and isn't in allowed-failures, so it blocks the merge gate.

mdbook-core 0.5.4 raised its anyhow floor to ^1.0.103, but the workspace still declares anyhow = "1.0.102" under [workspace.dependencies] in the root Cargo.toml. cargo minimal-versions test --direct resolves mdbook-prql's directanyhow requirement to its minimum, 1.0.102, which then can't satisfy mdbook-core's transitive ^1.0.103:

error: failed to select a version for `anyhow`.
... required by package `mdbook-core v0.5.4`
... which satisfies dependency `mdbook-core = "^0.5.4"` of package `mdbook-prql v0.13.15`
versions that meet the requirements `^1.0.103` are: 1.0.104, 1.0.103
all possible versions conflict with previously selected packages.
previously selected package `anyhow v1.0.102`
... which satisfies dependency `anyhow = "^1.0.102"` of package `mdbook-prql v0.13.15`

Raising that workspace declaration to anyhow = "1.0.103" should clear it — web/book takes anyhow = { workspace = true }, and the lockfile is already on 1.0.104, so nothing else moves. prqlc/prqlc's own anyhow = { version = "1.0.102", features = ["backtrace"], optional = true } doesn't need to change: it isn't in the conflicting path, and 1.0.103 satisfies it. Happy to push that one-liner if you'd like.

The MSRV change itself checks out. indexmap really is in prqlc's default-feature graph — default = ["cli"] pulls in serde_yaml, which depends on it — so the floor does have to move for cargo msrv verify to pass against the regenerated lockfile, and the description's reasoning holds. No stale 1.81 references remain anywhere in the repo, the Dependabot ignore removal leaves the cargo entry well-formed, and test-msrv does run on this PR since the nightly path filter matches both **/Cargo.toml and Cargo.lock.

Two smaller things:

  • No CHANGELOG.md entry. This is a user-facing support-floor change for a published crate, and development.md asks for a line when a change is user-facing; prior MSRV bumps landed as changelog entries (#3876, #3521). The **Internal changes**: section under [unreleased] is currently empty, so there's a spot for it.
  • Cargo.lock also moves from format version = 3 to version = 4, which the description doesn't mention alongside the other resolution changes. It's harmless — v4 needs Cargo ≥ 1.78, well under the new 1.85 floor — but worth confirming it was intended rather than incidental to the regeneration.

@prql-botprql-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

One thing worth knowing about rather than finding in a later diff: chore: align minimum dependency versions also moves seven windows-sys pointers down to the low end of their ranges — errno, is-terminal, quinn-udp, rustix, tempfile and winapi-util to 0.52.0, nu-ansi-term to 0.59.0 (rustix 1.1.4 declares windows-sys >=0.52, <0.62, so both ends are legal). It isn't a minimal-versions leak: a bare cargo update -p clap_complete on bebf357's lockfile reproduces those seven lines exactly, while cargo generate-lockfile from scratch on this tree picks 0.61.2 for all of them. So it's cargo's re-resolution rather than anything in the diff, and it'll recur on the next lock touch — but the nightly release binaries build from this lockfile, so the Windows ones will link the older bindings.

@max-sixty
max-sixty merged commit 8e269cd into mainAug 29, 2026
85 checks passed
@max-sixty
max-sixty deleted the codex/raise-prqlc-msrv branch August 29, 2026 01:57
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

@max-sixty@prql-bot