delegation: simplify matches on FnKind, minor refactorings - #160853

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches
Aug 21, 2026
Merged

delegation: simplify matches on FnKind, minor refactorings#160853
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

This PR refactors matches on FnKind making them smaller and more concise, next in all matches except fn_kinds function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.

Part of #118212.
r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 10, 2026
@aerooneqq
aerooneqqforce-pushed the delegation-fn-kind-matches branch 2 times, most recently from e9a04e2 to e680d29CompareAugust 12, 2026 07:09
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Aug 18, 2026
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
@petrochenkov

Copy link
Copy Markdown
Contributor

I'm generally skeptical about introduction of the extension trait.
It would be one thing if it was actually used as a trait (e.g. in bounds), or the methods were somehow "inherent" to TyCtxt.
But doing it just to use the method call syntax? I don't know.

Removing unnecessary lifetime parameters (#160853 (comment)) will make things nicer if the current setup without the extension trait is kept.

@petrochenkov

Copy link
Copy Markdown
Contributor

The logic behind the fn kind matching refactoring is also not very clear to me.
Marking the arms as unreachable is good, merging arms using the same logic like in get_delegation_parent_args_count_without_self is good, making the matches less exhaustive - maybe not so good for readability.

@petrochenkovpetrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 18, 2026
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

Reverted creation of extension to TyCtxt, But doing it just to use the method call syntax? - yes, just esthetical thought that it would look better when match-like functions will be grouped together and calling them as method calls, not that important for now.

making the matches less exhaustive - maybe not so good for readability

I think exhaustive matching does not allow to see the general strategy of handling different FnKinds. Wildcard patterns allow to clearly see general case while all other arms are small and represent edge cases, where one of them is for unreachable!().

In get_delegation_parent_args_count_without_self it is better because the code became more compact and we have an explicit general case handling which uses tcx.generics_of, while in the original version tcx.generics_of was executed all the time at the beginning of the method. Plus the size of patterns in each arm reduced significantly which makes code more understandable.

In get_parent_and_inheritance_kind it is now evident what is the boolean parameter of WithParent variant means plus it is more semantically correct as in original version we returned true for (FnKind::Free, FnKind::Free). + arms' patterns size reduction.

In get_delegation_self_ty we clearly highlight that we create concrete type only when delegation is inside impl (trait or inherent), in all other cases we delegate core logic of creation of self_ty to create_self_param_position_kind, it is explicitly shown with wildcard pattern, while in the original exhaustive match it is not that clear.

So I like new matches more than old ones (wildcard patterns reduce thinking overhead which is needed when first-time looking at exhaustive pattern with 4 tuples of FnKind and trying to understand what all those cases have in common and where to add potential new one), and overall code size reduction is good I think.

@rustbot ready

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 19, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

r=me after squashing commits.
@rustbot author
@bors delegate+

@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 21, 2026
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

✌️ @aerooneqq, you can now approve this pull request!

If @petrochenkov told you to "r=me" after making some further change, then please make that change and post @bors r=petrochenkov.

View changes since this delegation.

@rustbotrustbot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Aug 21, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Reminder, once the PR becomes ready for a review, use @rustbot ready.

@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors squash

@rust-bors

This comment has been minimized.

* More concise matches on `FnKind`, some renamings
* Move most of utility functions to extensions
* Address review comments
* Revert "Move most of utility functions to extensions"
* Address review comments
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🔨 5 commits were squashed into d6e4a1d.

@rust-bors
rust-borsBotforce-pushed the delegation-fn-kind-matches branch from c5400fa to d6e4a1dCompareAugust 21, 2026 11:03
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors r=petrochenkov

@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6e4a1d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 21, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
…uwer
Rollup of 16 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@jhprattjhpratt mentioned this pull request Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup of 20 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #161161 (proc_macro: add support for 16-bit targets)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- #160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- #160595 (Clarify `str::split_at` docs)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@rust-bors
rust-borsBot merged commit 98da550 into rust-lang:mainAug 21, 2026
13 checks passed
@rustbotrustbot added this to the 1.100.0 milestone Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup merge of #160853 - aerooneqq:delegation-fn-kind-matches, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.
Part of #118212.
r? @petrochenkov
pullBot pushed a commit to xtqqczze/rust-lang-miri that referenced this pull request Aug 22, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang/rust#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang/rust#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang/rust#161161 (proc_macro: add support for 16-bit targets)
- rust-lang/rust#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang/rust#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang/rust#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang/rust#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang/rust#160595 (Clarify `str::split_at` docs)
- rust-lang/rust#160813 (Optimize linked list iterator performance)
- rust-lang/rust#161271 (doc: document safety requirements for core WTF-8)
- rust-lang/rust#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang/rust#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang/rust#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang/rust#161393 (Configure LLM policy URL for triagebot)
- rust-lang/rust#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang/rust#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang/rust#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang/rust#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang/rust#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang/rust#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang/rust#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@aerooneqq@petrochenkov@rustbot
, '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" + '
Skip to content

delegation: simplify matches on FnKind, minor refactorings - #160853

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches
Aug 21, 2026
Merged

delegation: simplify matches on FnKind, minor refactorings#160853
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

This PR refactors matches on FnKind making them smaller and more concise, next in all matches except fn_kinds function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.

Part of #118212.
r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 10, 2026
@aerooneqq
aerooneqqforce-pushed the delegation-fn-kind-matches branch 2 times, most recently from e9a04e2 to e680d29CompareAugust 12, 2026 07:09
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Aug 18, 2026
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
@petrochenkov

Copy link
Copy Markdown
Contributor

I'm generally skeptical about introduction of the extension trait.
It would be one thing if it was actually used as a trait (e.g. in bounds), or the methods were somehow "inherent" to TyCtxt.
But doing it just to use the method call syntax? I don't know.

Removing unnecessary lifetime parameters (#160853 (comment)) will make things nicer if the current setup without the extension trait is kept.

@petrochenkov

Copy link
Copy Markdown
Contributor

The logic behind the fn kind matching refactoring is also not very clear to me.
Marking the arms as unreachable is good, merging arms using the same logic like in get_delegation_parent_args_count_without_self is good, making the matches less exhaustive - maybe not so good for readability.

@petrochenkovpetrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 18, 2026
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

Reverted creation of extension to TyCtxt, But doing it just to use the method call syntax? - yes, just esthetical thought that it would look better when match-like functions will be grouped together and calling them as method calls, not that important for now.

making the matches less exhaustive - maybe not so good for readability

I think exhaustive matching does not allow to see the general strategy of handling different FnKinds. Wildcard patterns allow to clearly see general case while all other arms are small and represent edge cases, where one of them is for unreachable!().

In get_delegation_parent_args_count_without_self it is better because the code became more compact and we have an explicit general case handling which uses tcx.generics_of, while in the original version tcx.generics_of was executed all the time at the beginning of the method. Plus the size of patterns in each arm reduced significantly which makes code more understandable.

In get_parent_and_inheritance_kind it is now evident what is the boolean parameter of WithParent variant means plus it is more semantically correct as in original version we returned true for (FnKind::Free, FnKind::Free). + arms' patterns size reduction.

In get_delegation_self_ty we clearly highlight that we create concrete type only when delegation is inside impl (trait or inherent), in all other cases we delegate core logic of creation of self_ty to create_self_param_position_kind, it is explicitly shown with wildcard pattern, while in the original exhaustive match it is not that clear.

So I like new matches more than old ones (wildcard patterns reduce thinking overhead which is needed when first-time looking at exhaustive pattern with 4 tuples of FnKind and trying to understand what all those cases have in common and where to add potential new one), and overall code size reduction is good I think.

@rustbot ready

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 19, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

r=me after squashing commits.
@rustbot author
@bors delegate+

@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 21, 2026
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

✌️ @aerooneqq, you can now approve this pull request!

If @petrochenkov told you to "r=me" after making some further change, then please make that change and post @bors r=petrochenkov.

View changes since this delegation.

@rustbotrustbot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Aug 21, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Reminder, once the PR becomes ready for a review, use @rustbot ready.

@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors squash

@rust-bors

This comment has been minimized.

* More concise matches on `FnKind`, some renamings
* Move most of utility functions to extensions
* Address review comments
* Revert "Move most of utility functions to extensions"
* Address review comments
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🔨 5 commits were squashed into d6e4a1d.

@rust-bors
rust-borsBotforce-pushed the delegation-fn-kind-matches branch from c5400fa to d6e4a1dCompareAugust 21, 2026 11:03
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors r=petrochenkov

@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6e4a1d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 21, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
…uwer
Rollup of 16 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@jhprattjhpratt mentioned this pull request Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup of 20 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #161161 (proc_macro: add support for 16-bit targets)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- #160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- #160595 (Clarify `str::split_at` docs)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@rust-bors
rust-borsBot merged commit 98da550 into rust-lang:mainAug 21, 2026
13 checks passed
@rustbotrustbot added this to the 1.100.0 milestone Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup merge of #160853 - aerooneqq:delegation-fn-kind-matches, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.
Part of #118212.
r? @petrochenkov
pullBot pushed a commit to xtqqczze/rust-lang-miri that referenced this pull request Aug 22, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang/rust#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang/rust#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang/rust#161161 (proc_macro: add support for 16-bit targets)
- rust-lang/rust#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang/rust#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang/rust#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang/rust#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang/rust#160595 (Clarify `str::split_at` docs)
- rust-lang/rust#160813 (Optimize linked list iterator performance)
- rust-lang/rust#161271 (doc: document safety requirements for core WTF-8)
- rust-lang/rust#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang/rust#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang/rust#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang/rust#161393 (Configure LLM policy URL for triagebot)
- rust-lang/rust#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang/rust#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang/rust#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang/rust#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang/rust#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang/rust#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang/rust#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@aerooneqq@petrochenkov@rustbot
, '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('^' + ".*" + '
Skip to content

delegation: simplify matches on FnKind, minor refactorings - #160853

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches
Aug 21, 2026
Merged

delegation: simplify matches on FnKind, minor refactorings#160853
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

This PR refactors matches on FnKind making them smaller and more concise, next in all matches except fn_kinds function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.

Part of #118212.
r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 10, 2026
@aerooneqq
aerooneqqforce-pushed the delegation-fn-kind-matches branch 2 times, most recently from e9a04e2 to e680d29CompareAugust 12, 2026 07:09
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Aug 18, 2026
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
@petrochenkov

Copy link
Copy Markdown
Contributor

I'm generally skeptical about introduction of the extension trait.
It would be one thing if it was actually used as a trait (e.g. in bounds), or the methods were somehow "inherent" to TyCtxt.
But doing it just to use the method call syntax? I don't know.

Removing unnecessary lifetime parameters (#160853 (comment)) will make things nicer if the current setup without the extension trait is kept.

@petrochenkov

Copy link
Copy Markdown
Contributor

The logic behind the fn kind matching refactoring is also not very clear to me.
Marking the arms as unreachable is good, merging arms using the same logic like in get_delegation_parent_args_count_without_self is good, making the matches less exhaustive - maybe not so good for readability.

@petrochenkovpetrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 18, 2026
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

Reverted creation of extension to TyCtxt, But doing it just to use the method call syntax? - yes, just esthetical thought that it would look better when match-like functions will be grouped together and calling them as method calls, not that important for now.

making the matches less exhaustive - maybe not so good for readability

I think exhaustive matching does not allow to see the general strategy of handling different FnKinds. Wildcard patterns allow to clearly see general case while all other arms are small and represent edge cases, where one of them is for unreachable!().

In get_delegation_parent_args_count_without_self it is better because the code became more compact and we have an explicit general case handling which uses tcx.generics_of, while in the original version tcx.generics_of was executed all the time at the beginning of the method. Plus the size of patterns in each arm reduced significantly which makes code more understandable.

In get_parent_and_inheritance_kind it is now evident what is the boolean parameter of WithParent variant means plus it is more semantically correct as in original version we returned true for (FnKind::Free, FnKind::Free). + arms' patterns size reduction.

In get_delegation_self_ty we clearly highlight that we create concrete type only when delegation is inside impl (trait or inherent), in all other cases we delegate core logic of creation of self_ty to create_self_param_position_kind, it is explicitly shown with wildcard pattern, while in the original exhaustive match it is not that clear.

So I like new matches more than old ones (wildcard patterns reduce thinking overhead which is needed when first-time looking at exhaustive pattern with 4 tuples of FnKind and trying to understand what all those cases have in common and where to add potential new one), and overall code size reduction is good I think.

@rustbot ready

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 19, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

r=me after squashing commits.
@rustbot author
@bors delegate+

@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 21, 2026
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

✌️ @aerooneqq, you can now approve this pull request!

If @petrochenkov told you to "r=me" after making some further change, then please make that change and post @bors r=petrochenkov.

View changes since this delegation.

@rustbotrustbot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Aug 21, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Reminder, once the PR becomes ready for a review, use @rustbot ready.

@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors squash

@rust-bors

This comment has been minimized.

* More concise matches on `FnKind`, some renamings
* Move most of utility functions to extensions
* Address review comments
* Revert "Move most of utility functions to extensions"
* Address review comments
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🔨 5 commits were squashed into d6e4a1d.

@rust-bors
rust-borsBotforce-pushed the delegation-fn-kind-matches branch from c5400fa to d6e4a1dCompareAugust 21, 2026 11:03
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors r=petrochenkov

@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6e4a1d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 21, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
…uwer
Rollup of 16 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@jhprattjhpratt mentioned this pull request Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup of 20 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #161161 (proc_macro: add support for 16-bit targets)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- #160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- #160595 (Clarify `str::split_at` docs)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@rust-bors
rust-borsBot merged commit 98da550 into rust-lang:mainAug 21, 2026
13 checks passed
@rustbotrustbot added this to the 1.100.0 milestone Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup merge of #160853 - aerooneqq:delegation-fn-kind-matches, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.
Part of #118212.
r? @petrochenkov
pullBot pushed a commit to xtqqczze/rust-lang-miri that referenced this pull request Aug 22, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang/rust#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang/rust#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang/rust#161161 (proc_macro: add support for 16-bit targets)
- rust-lang/rust#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang/rust#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang/rust#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang/rust#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang/rust#160595 (Clarify `str::split_at` docs)
- rust-lang/rust#160813 (Optimize linked list iterator performance)
- rust-lang/rust#161271 (doc: document safety requirements for core WTF-8)
- rust-lang/rust#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang/rust#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang/rust#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang/rust#161393 (Configure LLM policy URL for triagebot)
- rust-lang/rust#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang/rust#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang/rust#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang/rust#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang/rust#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang/rust#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang/rust#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@aerooneqq@petrochenkov@rustbot
, '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('^' + ".*" + '
Skip to content

delegation: simplify matches on FnKind, minor refactorings - #160853

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches
Aug 21, 2026
Merged

delegation: simplify matches on FnKind, minor refactorings#160853
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

This PR refactors matches on FnKind making them smaller and more concise, next in all matches except fn_kinds function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.

Part of #118212.
r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 10, 2026
@aerooneqq
aerooneqqforce-pushed the delegation-fn-kind-matches branch 2 times, most recently from e9a04e2 to e680d29CompareAugust 12, 2026 07:09
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Aug 18, 2026
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
@petrochenkov

Copy link
Copy Markdown
Contributor

I'm generally skeptical about introduction of the extension trait.
It would be one thing if it was actually used as a trait (e.g. in bounds), or the methods were somehow "inherent" to TyCtxt.
But doing it just to use the method call syntax? I don't know.

Removing unnecessary lifetime parameters (#160853 (comment)) will make things nicer if the current setup without the extension trait is kept.

@petrochenkov

Copy link
Copy Markdown
Contributor

The logic behind the fn kind matching refactoring is also not very clear to me.
Marking the arms as unreachable is good, merging arms using the same logic like in get_delegation_parent_args_count_without_self is good, making the matches less exhaustive - maybe not so good for readability.

@petrochenkovpetrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 18, 2026
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

Reverted creation of extension to TyCtxt, But doing it just to use the method call syntax? - yes, just esthetical thought that it would look better when match-like functions will be grouped together and calling them as method calls, not that important for now.

making the matches less exhaustive - maybe not so good for readability

I think exhaustive matching does not allow to see the general strategy of handling different FnKinds. Wildcard patterns allow to clearly see general case while all other arms are small and represent edge cases, where one of them is for unreachable!().

In get_delegation_parent_args_count_without_self it is better because the code became more compact and we have an explicit general case handling which uses tcx.generics_of, while in the original version tcx.generics_of was executed all the time at the beginning of the method. Plus the size of patterns in each arm reduced significantly which makes code more understandable.

In get_parent_and_inheritance_kind it is now evident what is the boolean parameter of WithParent variant means plus it is more semantically correct as in original version we returned true for (FnKind::Free, FnKind::Free). + arms' patterns size reduction.

In get_delegation_self_ty we clearly highlight that we create concrete type only when delegation is inside impl (trait or inherent), in all other cases we delegate core logic of creation of self_ty to create_self_param_position_kind, it is explicitly shown with wildcard pattern, while in the original exhaustive match it is not that clear.

So I like new matches more than old ones (wildcard patterns reduce thinking overhead which is needed when first-time looking at exhaustive pattern with 4 tuples of FnKind and trying to understand what all those cases have in common and where to add potential new one), and overall code size reduction is good I think.

@rustbot ready

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 19, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

r=me after squashing commits.
@rustbot author
@bors delegate+

@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 21, 2026
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

✌️ @aerooneqq, you can now approve this pull request!

If @petrochenkov told you to "r=me" after making some further change, then please make that change and post @bors r=petrochenkov.

View changes since this delegation.

@rustbotrustbot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Aug 21, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Reminder, once the PR becomes ready for a review, use @rustbot ready.

@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors squash

@rust-bors

This comment has been minimized.

* More concise matches on `FnKind`, some renamings
* Move most of utility functions to extensions
* Address review comments
* Revert "Move most of utility functions to extensions"
* Address review comments
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🔨 5 commits were squashed into d6e4a1d.

@rust-bors
rust-borsBotforce-pushed the delegation-fn-kind-matches branch from c5400fa to d6e4a1dCompareAugust 21, 2026 11:03
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors r=petrochenkov

@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6e4a1d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 21, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
…uwer
Rollup of 16 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@jhprattjhpratt mentioned this pull request Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup of 20 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #161161 (proc_macro: add support for 16-bit targets)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- #160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- #160595 (Clarify `str::split_at` docs)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@rust-bors
rust-borsBot merged commit 98da550 into rust-lang:mainAug 21, 2026
13 checks passed
@rustbotrustbot added this to the 1.100.0 milestone Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup merge of #160853 - aerooneqq:delegation-fn-kind-matches, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.
Part of #118212.
r? @petrochenkov
pullBot pushed a commit to xtqqczze/rust-lang-miri that referenced this pull request Aug 22, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang/rust#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang/rust#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang/rust#161161 (proc_macro: add support for 16-bit targets)
- rust-lang/rust#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang/rust#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang/rust#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang/rust#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang/rust#160595 (Clarify `str::split_at` docs)
- rust-lang/rust#160813 (Optimize linked list iterator performance)
- rust-lang/rust#161271 (doc: document safety requirements for core WTF-8)
- rust-lang/rust#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang/rust#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang/rust#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang/rust#161393 (Configure LLM policy URL for triagebot)
- rust-lang/rust#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang/rust#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang/rust#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang/rust#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang/rust#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang/rust#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang/rust#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@aerooneqq@petrochenkov@rustbot
, '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" + '
Skip to content

delegation: simplify matches on FnKind, minor refactorings - #160853

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches
Aug 21, 2026
Merged

delegation: simplify matches on FnKind, minor refactorings#160853
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

This PR refactors matches on FnKind making them smaller and more concise, next in all matches except fn_kinds function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.

Part of #118212.
r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 10, 2026
@aerooneqq
aerooneqqforce-pushed the delegation-fn-kind-matches branch 2 times, most recently from e9a04e2 to e680d29CompareAugust 12, 2026 07:09
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Aug 18, 2026
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
@petrochenkov

Copy link
Copy Markdown
Contributor

I'm generally skeptical about introduction of the extension trait.
It would be one thing if it was actually used as a trait (e.g. in bounds), or the methods were somehow "inherent" to TyCtxt.
But doing it just to use the method call syntax? I don't know.

Removing unnecessary lifetime parameters (#160853 (comment)) will make things nicer if the current setup without the extension trait is kept.

@petrochenkov

Copy link
Copy Markdown
Contributor

The logic behind the fn kind matching refactoring is also not very clear to me.
Marking the arms as unreachable is good, merging arms using the same logic like in get_delegation_parent_args_count_without_self is good, making the matches less exhaustive - maybe not so good for readability.

@petrochenkovpetrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 18, 2026
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

Reverted creation of extension to TyCtxt, But doing it just to use the method call syntax? - yes, just esthetical thought that it would look better when match-like functions will be grouped together and calling them as method calls, not that important for now.

making the matches less exhaustive - maybe not so good for readability

I think exhaustive matching does not allow to see the general strategy of handling different FnKinds. Wildcard patterns allow to clearly see general case while all other arms are small and represent edge cases, where one of them is for unreachable!().

In get_delegation_parent_args_count_without_self it is better because the code became more compact and we have an explicit general case handling which uses tcx.generics_of, while in the original version tcx.generics_of was executed all the time at the beginning of the method. Plus the size of patterns in each arm reduced significantly which makes code more understandable.

In get_parent_and_inheritance_kind it is now evident what is the boolean parameter of WithParent variant means plus it is more semantically correct as in original version we returned true for (FnKind::Free, FnKind::Free). + arms' patterns size reduction.

In get_delegation_self_ty we clearly highlight that we create concrete type only when delegation is inside impl (trait or inherent), in all other cases we delegate core logic of creation of self_ty to create_self_param_position_kind, it is explicitly shown with wildcard pattern, while in the original exhaustive match it is not that clear.

So I like new matches more than old ones (wildcard patterns reduce thinking overhead which is needed when first-time looking at exhaustive pattern with 4 tuples of FnKind and trying to understand what all those cases have in common and where to add potential new one), and overall code size reduction is good I think.

@rustbot ready

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 19, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

r=me after squashing commits.
@rustbot author
@bors delegate+

@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 21, 2026
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

✌️ @aerooneqq, you can now approve this pull request!

If @petrochenkov told you to "r=me" after making some further change, then please make that change and post @bors r=petrochenkov.

View changes since this delegation.

@rustbotrustbot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Aug 21, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Reminder, once the PR becomes ready for a review, use @rustbot ready.

@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors squash

@rust-bors

This comment has been minimized.

* More concise matches on `FnKind`, some renamings
* Move most of utility functions to extensions
* Address review comments
* Revert "Move most of utility functions to extensions"
* Address review comments
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🔨 5 commits were squashed into d6e4a1d.

@rust-bors
rust-borsBotforce-pushed the delegation-fn-kind-matches branch from c5400fa to d6e4a1dCompareAugust 21, 2026 11:03
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors r=petrochenkov

@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6e4a1d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 21, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
…uwer
Rollup of 16 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@jhprattjhpratt mentioned this pull request Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup of 20 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #161161 (proc_macro: add support for 16-bit targets)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- #160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- #160595 (Clarify `str::split_at` docs)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@rust-bors
rust-borsBot merged commit 98da550 into rust-lang:mainAug 21, 2026
13 checks passed
@rustbotrustbot added this to the 1.100.0 milestone Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup merge of #160853 - aerooneqq:delegation-fn-kind-matches, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.
Part of #118212.
r? @petrochenkov
pullBot pushed a commit to xtqqczze/rust-lang-miri that referenced this pull request Aug 22, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang/rust#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang/rust#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang/rust#161161 (proc_macro: add support for 16-bit targets)
- rust-lang/rust#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang/rust#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang/rust#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang/rust#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang/rust#160595 (Clarify `str::split_at` docs)
- rust-lang/rust#160813 (Optimize linked list iterator performance)
- rust-lang/rust#161271 (doc: document safety requirements for core WTF-8)
- rust-lang/rust#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang/rust#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang/rust#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang/rust#161393 (Configure LLM policy URL for triagebot)
- rust-lang/rust#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang/rust#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang/rust#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang/rust#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang/rust#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang/rust#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang/rust#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@aerooneqq@petrochenkov@rustbot
, '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('^' + ".*" + '
Skip to content

delegation: simplify matches on FnKind, minor refactorings - #160853

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches
Aug 21, 2026
Merged

delegation: simplify matches on FnKind, minor refactorings#160853
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

This PR refactors matches on FnKind making them smaller and more concise, next in all matches except fn_kinds function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.

Part of #118212.
r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 10, 2026
@aerooneqq
aerooneqqforce-pushed the delegation-fn-kind-matches branch 2 times, most recently from e9a04e2 to e680d29CompareAugust 12, 2026 07:09
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Aug 18, 2026
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
@petrochenkov

Copy link
Copy Markdown
Contributor

I'm generally skeptical about introduction of the extension trait.
It would be one thing if it was actually used as a trait (e.g. in bounds), or the methods were somehow "inherent" to TyCtxt.
But doing it just to use the method call syntax? I don't know.

Removing unnecessary lifetime parameters (#160853 (comment)) will make things nicer if the current setup without the extension trait is kept.

@petrochenkov

Copy link
Copy Markdown
Contributor

The logic behind the fn kind matching refactoring is also not very clear to me.
Marking the arms as unreachable is good, merging arms using the same logic like in get_delegation_parent_args_count_without_self is good, making the matches less exhaustive - maybe not so good for readability.

@petrochenkovpetrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 18, 2026
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

Reverted creation of extension to TyCtxt, But doing it just to use the method call syntax? - yes, just esthetical thought that it would look better when match-like functions will be grouped together and calling them as method calls, not that important for now.

making the matches less exhaustive - maybe not so good for readability

I think exhaustive matching does not allow to see the general strategy of handling different FnKinds. Wildcard patterns allow to clearly see general case while all other arms are small and represent edge cases, where one of them is for unreachable!().

In get_delegation_parent_args_count_without_self it is better because the code became more compact and we have an explicit general case handling which uses tcx.generics_of, while in the original version tcx.generics_of was executed all the time at the beginning of the method. Plus the size of patterns in each arm reduced significantly which makes code more understandable.

In get_parent_and_inheritance_kind it is now evident what is the boolean parameter of WithParent variant means plus it is more semantically correct as in original version we returned true for (FnKind::Free, FnKind::Free). + arms' patterns size reduction.

In get_delegation_self_ty we clearly highlight that we create concrete type only when delegation is inside impl (trait or inherent), in all other cases we delegate core logic of creation of self_ty to create_self_param_position_kind, it is explicitly shown with wildcard pattern, while in the original exhaustive match it is not that clear.

So I like new matches more than old ones (wildcard patterns reduce thinking overhead which is needed when first-time looking at exhaustive pattern with 4 tuples of FnKind and trying to understand what all those cases have in common and where to add potential new one), and overall code size reduction is good I think.

@rustbot ready

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 19, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

r=me after squashing commits.
@rustbot author
@bors delegate+

@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 21, 2026
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

✌️ @aerooneqq, you can now approve this pull request!

If @petrochenkov told you to "r=me" after making some further change, then please make that change and post @bors r=petrochenkov.

View changes since this delegation.

@rustbotrustbot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Aug 21, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Reminder, once the PR becomes ready for a review, use @rustbot ready.

@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors squash

@rust-bors

This comment has been minimized.

* More concise matches on `FnKind`, some renamings
* Move most of utility functions to extensions
* Address review comments
* Revert "Move most of utility functions to extensions"
* Address review comments
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🔨 5 commits were squashed into d6e4a1d.

@rust-bors
rust-borsBotforce-pushed the delegation-fn-kind-matches branch from c5400fa to d6e4a1dCompareAugust 21, 2026 11:03
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors r=petrochenkov

@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6e4a1d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 21, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
…uwer
Rollup of 16 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@jhprattjhpratt mentioned this pull request Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup of 20 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #161161 (proc_macro: add support for 16-bit targets)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- #160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- #160595 (Clarify `str::split_at` docs)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@rust-bors
rust-borsBot merged commit 98da550 into rust-lang:mainAug 21, 2026
13 checks passed
@rustbotrustbot added this to the 1.100.0 milestone Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup merge of #160853 - aerooneqq:delegation-fn-kind-matches, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.
Part of #118212.
r? @petrochenkov
pullBot pushed a commit to xtqqczze/rust-lang-miri that referenced this pull request Aug 22, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang/rust#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang/rust#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang/rust#161161 (proc_macro: add support for 16-bit targets)
- rust-lang/rust#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang/rust#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang/rust#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang/rust#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang/rust#160595 (Clarify `str::split_at` docs)
- rust-lang/rust#160813 (Optimize linked list iterator performance)
- rust-lang/rust#161271 (doc: document safety requirements for core WTF-8)
- rust-lang/rust#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang/rust#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang/rust#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang/rust#161393 (Configure LLM policy URL for triagebot)
- rust-lang/rust#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang/rust#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang/rust#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang/rust#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang/rust#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang/rust#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang/rust#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@aerooneqq@petrochenkov@rustbot
, '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('^' + ".*" + '
Skip to content

delegation: simplify matches on FnKind, minor refactorings - #160853

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches
Aug 21, 2026
Merged

delegation: simplify matches on FnKind, minor refactorings#160853
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

This PR refactors matches on FnKind making them smaller and more concise, next in all matches except fn_kinds function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.

Part of #118212.
r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 10, 2026
@aerooneqq
aerooneqqforce-pushed the delegation-fn-kind-matches branch 2 times, most recently from e9a04e2 to e680d29CompareAugust 12, 2026 07:09
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Aug 18, 2026
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
@petrochenkov

Copy link
Copy Markdown
Contributor

I'm generally skeptical about introduction of the extension trait.
It would be one thing if it was actually used as a trait (e.g. in bounds), or the methods were somehow "inherent" to TyCtxt.
But doing it just to use the method call syntax? I don't know.

Removing unnecessary lifetime parameters (#160853 (comment)) will make things nicer if the current setup without the extension trait is kept.

@petrochenkov

Copy link
Copy Markdown
Contributor

The logic behind the fn kind matching refactoring is also not very clear to me.
Marking the arms as unreachable is good, merging arms using the same logic like in get_delegation_parent_args_count_without_self is good, making the matches less exhaustive - maybe not so good for readability.

@petrochenkovpetrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 18, 2026
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

Reverted creation of extension to TyCtxt, But doing it just to use the method call syntax? - yes, just esthetical thought that it would look better when match-like functions will be grouped together and calling them as method calls, not that important for now.

making the matches less exhaustive - maybe not so good for readability

I think exhaustive matching does not allow to see the general strategy of handling different FnKinds. Wildcard patterns allow to clearly see general case while all other arms are small and represent edge cases, where one of them is for unreachable!().

In get_delegation_parent_args_count_without_self it is better because the code became more compact and we have an explicit general case handling which uses tcx.generics_of, while in the original version tcx.generics_of was executed all the time at the beginning of the method. Plus the size of patterns in each arm reduced significantly which makes code more understandable.

In get_parent_and_inheritance_kind it is now evident what is the boolean parameter of WithParent variant means plus it is more semantically correct as in original version we returned true for (FnKind::Free, FnKind::Free). + arms' patterns size reduction.

In get_delegation_self_ty we clearly highlight that we create concrete type only when delegation is inside impl (trait or inherent), in all other cases we delegate core logic of creation of self_ty to create_self_param_position_kind, it is explicitly shown with wildcard pattern, while in the original exhaustive match it is not that clear.

So I like new matches more than old ones (wildcard patterns reduce thinking overhead which is needed when first-time looking at exhaustive pattern with 4 tuples of FnKind and trying to understand what all those cases have in common and where to add potential new one), and overall code size reduction is good I think.

@rustbot ready

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 19, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

r=me after squashing commits.
@rustbot author
@bors delegate+

@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 21, 2026
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

✌️ @aerooneqq, you can now approve this pull request!

If @petrochenkov told you to "r=me" after making some further change, then please make that change and post @bors r=petrochenkov.

View changes since this delegation.

@rustbotrustbot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Aug 21, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Reminder, once the PR becomes ready for a review, use @rustbot ready.

@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors squash

@rust-bors

This comment has been minimized.

* More concise matches on `FnKind`, some renamings
* Move most of utility functions to extensions
* Address review comments
* Revert "Move most of utility functions to extensions"
* Address review comments
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🔨 5 commits were squashed into d6e4a1d.

@rust-bors
rust-borsBotforce-pushed the delegation-fn-kind-matches branch from c5400fa to d6e4a1dCompareAugust 21, 2026 11:03
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors r=petrochenkov

@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6e4a1d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 21, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
…uwer
Rollup of 16 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@jhprattjhpratt mentioned this pull request Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup of 20 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #161161 (proc_macro: add support for 16-bit targets)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- #160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- #160595 (Clarify `str::split_at` docs)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@rust-bors
rust-borsBot merged commit 98da550 into rust-lang:mainAug 21, 2026
13 checks passed
@rustbotrustbot added this to the 1.100.0 milestone Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup merge of #160853 - aerooneqq:delegation-fn-kind-matches, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.
Part of #118212.
r? @petrochenkov
pullBot pushed a commit to xtqqczze/rust-lang-miri that referenced this pull request Aug 22, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang/rust#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang/rust#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang/rust#161161 (proc_macro: add support for 16-bit targets)
- rust-lang/rust#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang/rust#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang/rust#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang/rust#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang/rust#160595 (Clarify `str::split_at` docs)
- rust-lang/rust#160813 (Optimize linked list iterator performance)
- rust-lang/rust#161271 (doc: document safety requirements for core WTF-8)
- rust-lang/rust#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang/rust#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang/rust#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang/rust#161393 (Configure LLM policy URL for triagebot)
- rust-lang/rust#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang/rust#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang/rust#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang/rust#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang/rust#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang/rust#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang/rust#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@aerooneqq@petrochenkov@rustbot
, '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); } })(); })();
Skip to content

delegation: simplify matches on FnKind, minor refactorings - #160853

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches
Aug 21, 2026
Merged

delegation: simplify matches on FnKind, minor refactorings#160853
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
aerooneqq:delegation-fn-kind-matches

Conversation

@aerooneqq

@aerooneqqaerooneqq commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

This PR refactors matches on FnKind making them smaller and more concise, next in all matches except fn_kinds function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.

Part of #118212.
r? @petrochenkov

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 10, 2026
@aerooneqq
aerooneqqforce-pushed the delegation-fn-kind-matches branch 2 times, most recently from e9a04e2 to e680d29CompareAugust 12, 2026 07:09
@petrochenkovpetrochenkov added the F-fn_delegation `#![feature(fn_delegation)]` label Aug 18, 2026
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
Comment threadcompiler/rustc_hir_analysis/src/delegation.rs Outdated
@petrochenkov

Copy link
Copy Markdown
Contributor

I'm generally skeptical about introduction of the extension trait.
It would be one thing if it was actually used as a trait (e.g. in bounds), or the methods were somehow "inherent" to TyCtxt.
But doing it just to use the method call syntax? I don't know.

Removing unnecessary lifetime parameters (#160853 (comment)) will make things nicer if the current setup without the extension trait is kept.

@petrochenkov

Copy link
Copy Markdown
Contributor

The logic behind the fn kind matching refactoring is also not very clear to me.
Marking the arms as unreachable is good, merging arms using the same logic like in get_delegation_parent_args_count_without_self is good, making the matches less exhaustive - maybe not so good for readability.

@petrochenkovpetrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 18, 2026
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

Reverted creation of extension to TyCtxt, But doing it just to use the method call syntax? - yes, just esthetical thought that it would look better when match-like functions will be grouped together and calling them as method calls, not that important for now.

making the matches less exhaustive - maybe not so good for readability

I think exhaustive matching does not allow to see the general strategy of handling different FnKinds. Wildcard patterns allow to clearly see general case while all other arms are small and represent edge cases, where one of them is for unreachable!().

In get_delegation_parent_args_count_without_self it is better because the code became more compact and we have an explicit general case handling which uses tcx.generics_of, while in the original version tcx.generics_of was executed all the time at the beginning of the method. Plus the size of patterns in each arm reduced significantly which makes code more understandable.

In get_parent_and_inheritance_kind it is now evident what is the boolean parameter of WithParent variant means plus it is more semantically correct as in original version we returned true for (FnKind::Free, FnKind::Free). + arms' patterns size reduction.

In get_delegation_self_ty we clearly highlight that we create concrete type only when delegation is inside impl (trait or inherent), in all other cases we delegate core logic of creation of self_ty to create_self_param_position_kind, it is explicitly shown with wildcard pattern, while in the original exhaustive match it is not that clear.

So I like new matches more than old ones (wildcard patterns reduce thinking overhead which is needed when first-time looking at exhaustive pattern with 4 tuples of FnKind and trying to understand what all those cases have in common and where to add potential new one), and overall code size reduction is good I think.

@rustbot ready

@rustbotrustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 19, 2026
@petrochenkov

Copy link
Copy Markdown
Contributor

r=me after squashing commits.
@rustbot author
@bors delegate+

@rustbotrustbot removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 21, 2026
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

✌️ @aerooneqq, you can now approve this pull request!

If @petrochenkov told you to "r=me" after making some further change, then please make that change and post @bors r=petrochenkov.

View changes since this delegation.

@rustbotrustbot added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Aug 21, 2026
@rustbot

Copy link
Copy Markdown
Collaborator

Reminder, once the PR becomes ready for a review, use @rustbot ready.

@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors squash

@rust-bors

This comment has been minimized.

* More concise matches on `FnKind`, some renamings
* Move most of utility functions to extensions
* Address review comments
* Revert "Move most of utility functions to extensions"
* Address review comments
@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🔨 5 commits were squashed into d6e4a1d.

@rust-bors
rust-borsBotforce-pushed the delegation-fn-kind-matches branch from c5400fa to d6e4a1dCompareAugust 21, 2026 11:03
@aerooneqq

Copy link
Copy Markdown
ContributorAuthor

@bors r=petrochenkov

@rust-bors

rust-borsBot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

📌 Commit d6e4a1d has been approved by petrochenkov

It is now in the queue for this repository.

@rust-borsrust-borsBot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Aug 21, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 21, 2026
…es, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for rust-lang#160505.
Part of rust-lang#118212.
r? @petrochenkov
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
…uwer
Rollup of 16 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@jhprattjhpratt mentioned this pull request Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup of 20 pull requests
Successful merges:
- #161259 (move some attribute related structs out of rustc_attr_ir)
- #160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- #161161 (proc_macro: add support for 16-bit targets)
- #159899 ( `GenericArgs::types` triage + possible fixes)
- #160459 (Use attribute parser for `deprecated` attribute checking)
- #160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- #160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- #160595 (Clarify `str::split_at` docs)
- #160813 (Optimize linked list iterator performance)
- #161271 (doc: document safety requirements for core WTF-8)
- #161317 (LLVM 24: configure float-abi via module flag)
- #161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- #161369 (Add regression test for confusing lifetime error message issue)
- #161393 (Configure LLM policy URL for triagebot)
- #161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- #161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- #161410 (Fix rustdoc remapping `documentation` scope documentation)
- #161415 (Update expect messages in path docs to better follow guidelines)
- #161438 (Change triagebot backport to ping T-libs-fcp)
- #161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- #160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
@rust-bors
rust-borsBot merged commit 98da550 into rust-lang:mainAug 21, 2026
13 checks passed
@rustbotrustbot added this to the 1.100.0 milestone Aug 21, 2026
rust-borsBot pushed a commit that referenced this pull request Aug 21, 2026
Rollup merge of #160853 - aerooneqq:delegation-fn-kind-matches, r=petrochenkov
delegation: simplify matches on `FnKind`, minor refactorings
This PR refactors matches on `FnKind` making them smaller and more concise, next in all matches except `fn_kinds` function we no longer panic on delegation to inherent impls. And some minor renamings/refactorings. First step for #160505.
Part of #118212.
r? @petrochenkov
pullBot pushed a commit to xtqqczze/rust-lang-miri that referenced this pull request Aug 22, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang/rust#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang/rust#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang/rust#161161 (proc_macro: add support for 16-bit targets)
- rust-lang/rust#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang/rust#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang/rust#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang/rust#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang/rust#160595 (Clarify `str::split_at` docs)
- rust-lang/rust#160813 (Optimize linked list iterator performance)
- rust-lang/rust#161271 (doc: document safety requirements for core WTF-8)
- rust-lang/rust#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang/rust#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang/rust#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang/rust#161393 (Configure LLM policy URL for triagebot)
- rust-lang/rust#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang/rust#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang/rust#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang/rust#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang/rust#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang/rust#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang/rust#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
malezjaa pushed a commit to malezjaa/rust that referenced this pull request Aug 23, 2026
Rollup of 20 pull requests
Successful merges:
- rust-lang#161259 (move some attribute related structs out of rustc_attr_ir)
- rust-lang#160853 (delegation: simplify matches on `FnKind`, minor refactorings)
- rust-lang#161161 (proc_macro: add support for 16-bit targets)
- rust-lang#159899 ( `GenericArgs::types` triage + possible fixes)
- rust-lang#160459 (Use attribute parser for `deprecated` attribute checking)
- rust-lang#160536 (Inline `String::into_raw_parts` and reuse `from_utf16` optimization)
- rust-lang#160563 (Make `BorrowedCursor<'a, T>` covariant in `'a` and drop an indirection)
- rust-lang#160595 (Clarify `str::split_at` docs)
- rust-lang#160813 (Optimize linked list iterator performance)
- rust-lang#161271 (doc: document safety requirements for core WTF-8)
- rust-lang#161317 (LLVM 24: configure float-abi via module flag)
- rust-lang#161320 (Only suggest `RUST_MIN_STACK` if maybe stack overflow)
- rust-lang#161369 (Add regression test for confusing lifetime error message issue)
- rust-lang#161393 (Configure LLM policy URL for triagebot)
- rust-lang#161403 (splat-fn-ptr-ptr-tuple.rs: add `let` to avoid UB)
- rust-lang#161409 (Add back `tests/rustdoc-gui/notable-trait.goml` test)
- rust-lang#161410 (Fix rustdoc remapping `documentation` scope documentation)
- rust-lang#161415 (Update expect messages in path docs to better follow guidelines)
- rust-lang#161438 (Change triagebot backport to ping T-libs-fcp)
- rust-lang#161442 (Add regression test for dead code on type alias used in impl self type)
Failed merges:
- rust-lang#160509 (Remove `RegionExt`; move methods to `Region` in `rustc_type_ir`)
implement [u8]::split_ascii_whitespace
format
fix
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

F-fn_delegation`#![feature(fn_delegation)]`S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@aerooneqq@petrochenkov@rustbot