Skip to content

Commit

Permalink
rustdoc-search: case-sensitive only when capitals are used
Browse files Browse the repository at this point in the history
This is the "smartcase" behavior, described by vim and dtolnay.
  • Loading branch information
notriddle committed Nov 14, 2024
1 parent a4cedec commit 32500aa
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/librustdoc/html/static/js/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -2500,6 +2500,7 @@ class DocSearch {
const sortResults = async(results, typeInfo, preferredCrate) => {
const userQuery = parsedQuery.userQuery;
const normalizedUserQuery = parsedQuery.userQuery.toLowerCase();
const isMixedCase = normalizedUserQuery !== userQuery;
const result_list = [];
for (const result of results.values()) {
result.item = this.searchIndex[result.id];
Expand All @@ -2511,10 +2512,12 @@ class DocSearch {
let a, b;

// sort by exact case-sensitive match
a = (aaa.item.name !== userQuery);
b = (bbb.item.name !== userQuery);
if (a !== b) {
return a - b;
if (isMixedCase) {
a = (aaa.item.name !== userQuery);
b = (bbb.item.name !== userQuery);
if (a !== b) {
return a - b;
}
}

// sort by exact match with regard to the last word (mismatch goes later)
Expand Down
24 changes: 24 additions & 0 deletions tests/rustdoc-js-std/write.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const EXPECTED = [
{
'query': 'write',
'others': [
{ 'path': 'std::fmt', 'name': 'write' },
{ 'path': 'std::fs', 'name': 'write' },
{ 'path': 'std::ptr', 'name': 'write' },
{ 'path': 'std::fmt', 'name': 'Write' },
{ 'path': 'std::io', 'name': 'Write' },
{ 'path': 'std::hash::Hasher', 'name': 'write' },
],
},
{
'query': 'Write',
'others': [
{ 'path': 'std::fmt', 'name': 'Write' },
{ 'path': 'std::io', 'name': 'Write' },
{ 'path': 'std::fmt', 'name': 'write' },
{ 'path': 'std::fs', 'name': 'write' },
{ 'path': 'std::ptr', 'name': 'write' },
{ 'path': 'std::hash::Hasher', 'name': 'write' },
],
},
];
17 changes: 17 additions & 0 deletions tests/rustdoc-js/case.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const EXPECTED = [
{
'query': 'Foo',
'others': [
{ 'path': 'case', 'name': 'Foo', 'desc': 'Docs for Foo' },
{ 'path': 'case', 'name': 'foo', 'desc': 'Docs for foo' },
],
},
{
'query': 'foo',
'others': [
// https://github.com/rust-lang/rust/issues/133017
{ 'path': 'case', 'name': 'Foo', 'desc': 'Docs for Foo' },
{ 'path': 'case', 'name': 'foo', 'desc': 'Docs for foo' },
],
},
];
7 changes: 7 additions & 0 deletions tests/rustdoc-js/case.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#![allow(nonstandard_style)]

/// Docs for Foo
pub struct Foo;

/// Docs for foo
pub struct foo;

0 comments on commit 32500aa

Please sign in to comment.