Sticky nesting goes wrong in servo/components/style/values/generics/border.rs and breaks scrolling, makes document not scrollable.
Categories
(Webtools :: Searchfox, defect, P1)
Tracking
(Not tracked)
People
(Reporter: emilio, Assigned: asuth)
References
(Regression, )
Details
If you go to https://searchfox.org/mozilla-central/source/servo/components/style/values/generics/border.rs you'll find that the page is not scrollable.
This is because of too many closing </div> tags, which I believe come from our sticky nesting code.
| Reporter | ||
Comment 1•6 years ago
|
||
I believe this is a regression from bug 1556234.
Comment 3•6 years ago
•
|
||
The page isn't scrollable in Chrome either so I'm not sure the above analysis is correct.
If I remove height:100%; overflow:hiddenon the <body> element then the page is scrollable, so it seems more like a CSS mistake to me...
| Reporter | ||
Comment 4•6 years ago
|
||
(In reply to Mats Palmgren (:mats) from comment #3)
The page isn't scrollable in Chrome either so I'm not sure the above analysis is correct.
If I removeheight:100%; overflow:hiddenon the<body>element then the page is scrollable, so it seems more like a CSS mistake to me...
The body is not supposed to be scrollable, <div id="scrolling"> is what's supposed to be scrollable, but it was closed eagerly so it was zero-height.
Comment 5•6 years ago
|
||
Ah, I see. It'd be great if someone could fix that typo soon-ish since this is rather crippling...
| Reporter | ||
Comment 6•6 years ago
|
||
It's not only a typo, the sticky nesting code receives the opening / closing tag stuff from the indexer... Andrew, you're mast familiar with the nesting code than me, is there any chance you could take a look?
Otherwise let me know and I'll poke at it.
| Assignee | ||
Comment 7•6 years ago
|
||
Disclaimer: This isn't happening for me on https://searchfox.org/mozilla-central/source/servo/components/style/values/generics/border.rs with the footer identifying the indexer run of "This page was generated by Searchfox 2019-9-24 10:36." I see 2 commits dated "2019-09-23" however. Maybe https://hg.mozilla.org/mozilla-central/rev/9e3056eb1c86f768f8932bd71628185e4e00e15a#l2.12 was the code that made things unhappy?
That said, I see the logic error and the underlying problem. The problem is caused by having 2 tokens on a line that both attempt to start nesting. My original patch logic had at least intended to only allow us to start a single nest per line, which is arguably the only sane thing to do for position:sticky. But in a refactoring I think I over-cleaned-up and made it so we can push more than one entry onto the nesting_stack which will indeed lead to math issues. https://github.com/mozsearch/mozsearch/blob/master/tools/src/format.rs#L177 needs to be guarded so that we don't re-enter the branch if starts_nest is already true. We only want the first thing causing us to nest a line to win.
| Assignee | ||
Comment 8•6 years ago
|
||
Okay, so there was indeed a guard like I thought (a_start != top.nesting_range.start_lineno), but that assumes that the start range of the nesting range is on the same line as the triggering token itself. This constraint no longer holds in the way the code intended it to. I evolved the concept of nestingRange to try and refer directly to the {}'s of the code block for super-cool highlighting purposes, with the presumption that the sticky line would be the line that has the token with the nestingRange on it and its enclosing div would run until the line before the closing brace.
This implies a constraint that the token with the nestingContext must precede the start of the nesting context. A pragmatic relaxation of this based on existing indexer limitations is that we may only have line-level information, so the constraint instead becomes that the nestingContext must not start on a line preceding the initiating token. (I think the indexer would need to perform some type of magic normalization for something like a "do-while" loop where the interesting condition expression lives after the code block. position:sticky can't just magically handle that.)
So that broken logic really didn't like this broken data that I fished out of an older webserver's indexing run:
{"loc":"00168:11-30","source":1,"syntax":"","pretty":"struct style::values::generics::border::GenericBorderRadius","sym":"style::values::generics::border::GenericBorderRadius","nestingRange":"157:4-177:19"}
{"loc":"00168:11-30","source":1,"syntax":"","pretty":"struct style::values::generics::border::GenericBorderRadius","sym":"style::values::generics::border::GenericBorderRadius","nestingRange":"168:11-177:19"}
The source as understood by that indexing run corresponds to:
#[derive( // 153
Animate,
Clone,
ComputeSquaredDistance,
Copy, // 157: FIRST NESTING VALUE STARTS HERE?!
Debug,
MallocSizeOf,
PartialEq,
SpecifiedValueInfo,
ToAnimatedValue,
ToComputedValue,
ToResolvedValue,
ToShmem,
)]
#[repr(C)]
pub struct GenericBorderRadius<LengthPercentage> { // 168
/// The top left radius.
#[shmem(field_bound)]
pub top_left: GenericBorderCornerRadius<LengthPercentage>,
/// The top right radius.
pub top_right: GenericBorderCornerRadius<LengthPercentage>,
/// The bottom right radius.
pub bottom_right: GenericBorderCornerRadius<LengthPercentage>,
/// The bottom left radius.
pub bottom_left: GenericBorderCornerRadius<LengthPercentage>, // 177
}
Note that the line 157 thing is nonsensical. I started to try and dig into the save-analysis json files (there were 2 libs that seemed to include a "border.rs" file?) yesterday but had to break for dinner and unfortunately didn't get back to it before today's indexer run clobbered the precious save-analysis data. It's possible platform merging or the multiple libs that might contain the file complicated things.
This isn't the first time the rust save-analysis data has betrayed us in terms of positions being gibberish. See https://bugzilla.mozilla.org/show_bug.cgi?id=1562879#c13 for another sad time.
My tentative gameplan here is:
- Ignore nestingContext information that appears invalid. It might make sense to do this during read_analysis, noting that it will lead to the data being dropped on merges so we would just expect not to see the bad data in
analysis/anymore. - Adjust the guard to operate on the token start rather than the nesting range start.
- Make the
starts_nestlogic more paranoid.
| Assignee | ||
Comment 10•6 years ago
|
||
For bug 1586619 (servo/components/style/values/specified/text.rs) the problem is similar again but happens multiple times in the file:
{"loc":"00171:11-23","source":1,"syntax":"","pretty":"struct style::values::specified::text::TextOverflow","sym":"style::values::specified::text::TextOverflow","nestingRange":"136:9-173:13"}
{"loc":"00171:11-23","source":1,"syntax":"","pretty":"struct style::values::specified::text::TextOverflow","sym":"style::values::specified::text::TextOverflow","nestingRange":"171:11-175:14"}
{"loc":"00474:9-26","source":1,"syntax":"","pretty":"enum style::values::specified::text::TextTransformCase","sym":"style::values::specified::text::TextTransformCase","nestingRange":"367:11-482:14"}
{"loc":"00474:9-26","source":1,"syntax":"","pretty":"enum style::values::specified::text::TextTransformCase","sym":"style::values::specified::text::TextTransformCase","nestingRange":"474:9-482:14"}
{"loc":"00955:9-18","source":1,"syntax":"","pretty":"enum style::values::specified::text::WordBreak","sym":"style::values::specified::text::WordBreak","nestingRange":"852:11-964:13"}
{"loc":"00955:9-18","source":1,"syntax":"","pretty":"enum style::values::specified::text::WordBreak","sym":"style::values::specified::text::WordBreak","nestingRange":"955:9-964:13"}
The save-analysis for all 4 platforms all seems correct for the first case above (TextOverflow):
{
"kind": "Struct",
"id": {
"krate": 0,
"index": 56063
},
"span": {
"file_name": "servo/components/style/values/specified/text.rs",
"byte_start": 2073113,
"byte_end": 2073125,
"line_start": 171,
"line_end": 171,
"column_start": 12,
"column_end": 24
},
"name": "TextOverflow",
"qualname": "::values::specified::text::TextOverflow",
"value": "TextOverflow { first, second }",
"parent": null,
"children": [
{
"krate": 0,
"index": 56064
},
{
"krate": 0,
"index": 56065
}
],
"decl_id": null,
"docs": " text-overflow. Specifies rendering when inline content overflows its line box edge.\n",
"sig": null,
"attributes": [
{
"value": "structural_match",
"span": {
"file_name": "servo/components/style/values/specified/text.rs",
"byte_start": 2073102,
"byte_end": 2073372,
"line_start": 171,
"line_end": 176,
"column_start": 1,
"column_end": 2
}
}
]
},
{
"kind": "Field",
"id": {
"krate": 0,
"index": 56064
},
"span": {
"file_name": "servo/components/style/values/specified/text.rs",
"byte_start": 2073238,
"byte_end": 2073243,
"line_start": 173,
"line_end": 173,
"column_start": 9,
"column_end": 14
},
"name": "first",
"qualname": "::values::specified::text::TextOverflow::first",
"value": "values::specified::text::TextOverflowSide",
"parent": {
"krate": 0,
"index": 56063
},
"children": [],
"decl_id": null,
"docs": " First value. Applies to end line box edge if no second is supplied; line-left edge otherwise.\n",
"sig": null,
"attributes": []
},
{
"kind": "Field",
"id": {
"krate": 0,
"index": 56065
},
"span": {
"file_name": "servo/components/style/values/specified/text.rs",
"byte_start": 2073337,
"byte_end": 2073343,
"line_start": 175,
"line_end": 175,
"column_start": 9,
"column_end": 15
},
"name": "second",
"qualname": "::values::specified::text::TextOverflow::second",
"value": "std::option::Option<values::specified::text::TextOverflowSide>",
"parent": {
"krate": 0,
"index": 56063
},
"children": [],
"decl_id": null,
"docs": " Second value. Applies to the line-right edge if supplied.\n",
"sig": null,
"attributes": []
},
However, it appears that a similarly named definition is somehow colliding. This appears to be the definition whose span is getting erroneously unified:
{
"kind": "Enum",
"id": {
"krate": 0,
"index": 56030
},
"span": {
"file_name": "servo/components/style/values/specified/text.rs",
"byte_start": 2071795,
"byte_end": 2071811,
"line_start": 136,
"line_end": 136,
"column_start": 10,
"column_end": 26
},
"name": "TextOverflowSide",
"qualname": "::values::specified::text::TextOverflowSide",
"value": "TextOverflowSide::{Clip, Ellipsis, String}",
"parent": null,
"children": [
{
"krate": 0,
"index": 56031
},
{
"krate": 0,
"index": 56033
},
{
"krate": 0,
"index": 56035
}
],
"decl_id": null,
"docs": " A generic value for the `text-overflow` property.\n",
"sig": null,
"attributes": [
{
"value": "repr(C, u8)",
"span": {
"file_name": "servo/components/style/values/specified/text.rs",
"byte_start": 2071771,
"byte_end": 2071785,
"line_start": 135,
"line_end": 135,
"column_start": 1,
"column_end": 15
}
},
{
"value": "structural_match",
"span": {
"file_name": "servo/components/style/values/specified/text.rs",
"byte_start": 2071786,
"byte_end": 2072025,
"line_start": 136,
"line_end": 143,
"column_start": 1,
"column_end": 2
}
}
]
},
| Assignee | ||
Comment 11•6 years ago
|
||
And the problem is similar in the second case. The correct symbol "::values::specified::text::TextTransformCase" is apparently colliding with "::values::specified::text::TextTransform".
| Assignee | ||
Comment 12•6 years ago
|
||
The problem appears to be the Defs map created by rust-indexer can experience collisions as it's run over all platforms at the same time. Confusingly, I could not reproduce when run just against our objdir/PLATFORM/ dirs, I also had to include a objdir/testing/geckodriver/PLATFORM/ and a rustlib/PLATFORM/analysis.
Running with debug logging like so: RUST_LOG=debug ~/mozsearch/tools/target/release/rust-indexer ~/index/mozilla-central/gecko-dev ~/index/mozilla-central/analysis ~/index/mozilla-central/objdir ~/index/mozilla-central/rustlib/src/rust/src ~/index/mozilla-central/objdir/x86_64-unknown-linux-gnu/debug/deps/save-analysis ~/index/mozilla-central/objdir/x86_64-apple-darwin/debug/deps/save-analysis ~/index/mozilla-central/objdir/x86_64-pc-windows-msvc/debug/deps/save-analysis ~/index/mozilla-central/objdir/thumbv7neon-linux-androideabi/debug/deps/save-analysis ~/index/mozilla-central/objdir/testing/geckodriver/x86_64-unknown-linux-gnu/debug/deps/save-analysis ~/index/mozilla-central/rustlib/x86_64-unknown-linux-gnu/analysis
Here's what's going on:
Here is the first TextOverflow def being added to the Defs map from the first servo save-analysis:
DEBUG 2019-10-14T20:35:08Z: rust_indexer: Indexing def: DefId(GlobalCrateId { name: "style", disambiguator: (5848791475604674575, 408823606405095592) }, 56063) -> Def { kind: Struct, id: Id { krate: 0, index: 56063 }, span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073113, byte_end: 2073125, line_start: Row(171, PhantomData), line_end: Row(171, PhantomData), column_start: Column(12, PhantomData), column_end: Column(24, PhantomData) }, name: "TextOverflow", qualname: "style::values::specified::text::TextOverflow", value: "TextOverflow { first, second }", parent: None, children: [Id { krate: 0, index: 56064 }, Id { krate: 0, index: 56065 }], decl_id: None, docs: " text-overflow. Specifies rendering when inline content overflows its line box edge.\n", sig: None, attributes: [Attribute { value: "structural_match", span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073102, byte_end: 2073372, line_start: Row(171, PhantomData), line_end: Row(176, PhantomData), column_start: Column(1, PhantomData), column_end: Column(2, PhantomData) } }] }
And here's the TextOverflowSide that eventually ends up colliding being added in, from the first servo save-analysis:
DEBUG 2019-10-14T20:35:08Z: rust_indexer: Indexing def: DefId(GlobalCrateId { name: "style", disambiguator: (5848791475604674575, 408823606405095592) }, 56030) -> Def { kind: Enum, id: Id { krate: 0, index: 56030 }, span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2071795, byte_end: 2071811, line_start: Row(136, PhantomData), line_end: Row(136, PhantomData), column_start: Column(10, PhantomData), column_end: Column(26, PhantomData) }, name: "TextOverflowSide", qualname: "style::values::specified::text::TextOverflowSide", value: "TextOverflowSide::{Clip, Ellipsis, String}", parent: None, children: [Id { krate: 0, index: 56031 }, Id { krate: 0, index: 56033 }, Id { krate: 0, index: 56035 }], decl_id: None, docs: " A generic value for the
text-overflowproperty.\n", sig: None, attributes: [Attribute { value: "repr(C, u8)", span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2071771, byte_end: 2071785, line_start: Row(135, PhantomData), line_end: Row(135, PhantomData), column_start: Column(1, PhantomData), column_end: Column(15, PhantomData) } }, Attribute { value: "structural_match", span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2071786, byte_end: 2072025, line_start: Row(136, PhantomData), line_end: Row(143, PhantomData), column_start: Column(1, PhantomData), column_end: Column(2, PhantomData) } }] }
The number to look at is the 56030.
Now here's the second save-analysis's TextOverflow:
DEBUG 2019-10-14T20:35:15Z: rust_indexer: Indexing def: DefId(GlobalCrateId { name: "style", disambiguator: (5848791475604674575, 408823606405095592) }, 56028) -> Def { kind: Struct, id: Id { krate: 0, index: 56028 }, span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073113, byte_end: 2073125, line_start: Row(171, PhantomData), line_end: Row(171, PhantomData), column_start: Column(12, PhantomData), column_end: Column(24, PhantomData) }, name: "TextOverflow", qualname: "style::values::specified::text::TextOverflow", value: "TextOverflow { first, second }", parent: None, children: [Id { krate: 0, index: 56029 }, Id { krate: 0, index: 56030 }], decl_id: None, docs: " text-overflow. Specifies rendering when inline content overflows its line box edge.\n", sig: None, attributes: [Attribute { value: "structural_match", span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073102, byte_end: 2073372, line_start: Row(171, PhantomData), line_end: Row(176, PhantomData), column_start: Column(1, PhantomData), column_end: Column(2, PhantomData) } }] }
Note that it:
- Has exactly the same disambiguator from the first save-analysis file processed.
- Has a child of 56030.
We can see debug log complaining about this when it gets to the 56030. Here it is saying it wants to index 56030
DEBUG 2019-10-14T20:35:15Z: rust_indexer: Indexing def: DefId(GlobalCrateId { name: "style", disambiguator: (5848791475604674575, 408823606405095592) }, 56030) -> Def { kind: Field, id: Id { krate: 0, index: 56030 }, span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073337, byte_end: 2073343, line_start: Row(175, PhantomData), line_end: Row(175, PhantomData), column_start: Column(9, PhantomData), column_end: Column(15, PhantomData) }, name: "second", qualname: "style::values::specified::text::TextOverflow::second", value: "std::option::Option<values::specified::text::TextOverflowSide>", parent: Some(Id { krate: 0, index: 56028 }), children: [], decl_id: None, docs: " Second value. Applies to the line-right edge if supplied.\n", sig: None, attributes: [] }
And the next line is the dupe being logged:
DEBUG 2019-10-14T20:35:15Z: rust_indexer: Found a definition with the same ID twice? Def { kind: Enum, id: Id { krate: 0, index: 56030 }, span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2071795, byte_end: 2071811, line_start: Row(136, PhantomData), line_end: Row(136, PhantomData), column_start: Column(10, PhantomData), column_end: Column(26, PhantomData) }, name: "TextOverflowSide", qualname: "style::values::specified::text::TextOverflowSide", value: "TextOverflowSide::{Clip, Ellipsis, String}", parent: None, children: [Id { krate: 0, index: 56031 }, Id { krate: 0, index: 56033 }, Id { krate: 0, index: 56035 }], decl_id: None, docs: " A generic value for the
text-overflowproperty.\n", sig: None, attributes: [Attribute { value: "repr(C, u8)", span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2071771, byte_end: 2071785, line_start: Row(135, PhantomData), line_end: Row(135, PhantomData), column_start: Column(1, PhantomData), column_end: Column(15, PhantomData) } }, Attribute { value: "structural_match", span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2071786, byte_end: 2072025, line_start: Row(136, PhantomData), line_end: Row(143, PhantomData), column_start: Column(1, PhantomData), column_end: Column(2, PhantomData) } }] }, Def { kind: Field, id: Id { krate: 0, index: 56030 }, span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073337, byte_end: 2073343, line_start: Row(175, PhantomData), line_end: Row(175, PhantomData), column_start: Column(9, PhantomData), column_end: Column(15, PhantomData) }, name: "second", qualname: "::values::specified::text::TextOverflow::second", value: "std::option::Option<values::specified::text::TextOverflowSide>", parent: Some(Id { krate: 0, index: 56028 }), children: [], decl_id: None, docs: " Second value. Applies to the line-right edge if supplied.\n", sig: None, attributes: [] }
| Assignee | ||
Comment 13•6 years ago
|
||
And note that only 2 of the 4 save-analysis files have the same disambiguators. These are the 4 passes for the TextOverflow symbol:
DEBUG 2019-10-14T20:35:08Z: rust_indexer: Indexing def: DefId(GlobalCrateId { name: "style", disambiguator: (5848791475604674575, 408823606405095592) }, 56063) -> Def { kind: Struct, id: Id { krate: 0, index: 56063 }, span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073113, byte_end: 2073125, line_start: Row(171, PhantomData), line_end: Row(171, PhantomData), column_start: Column(12, PhantomData), column_end: Column(24, PhantomData) }, name: "TextOverflow", qualname: "style::values::specified::text::TextOverflow", value: "TextOverflow { first, second }", parent: None, children: [Id { krate: 0, index: 56064 }, Id { krate: 0, index: 56065 }], decl_id: None, docs: " text-overflow. Specifies rendering when inline content overflows its line box edge.\n", sig: None, attributes: [Attribute { value: "structural_match", span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073102, byte_end: 2073372, line_start: Row(171, PhantomData), line_end: Row(176, PhantomData), column_start: Column(1, PhantomData), column_end: Column(2, PhantomData) } }] }
DEBUG 2019-10-14T20:35:15Z: rust_indexer: Indexing def: DefId(GlobalCrateId { name: "style", disambiguator: (5848791475604674575, 408823606405095592) }, 56028) -> Def { kind: Struct, id: Id { krate: 0, index: 56028 }, span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073113, byte_end: 2073125, line_start: Row(171, PhantomData), line_end: Row(171, PhantomData), column_start: Column(12, PhantomData), column_end: Column(24, PhantomData) }, name: "TextOverflow", qualname: "style::values::specified::text::TextOverflow", value: "TextOverflow { first, second }", parent: None, children: [Id { krate: 0, index: 56029 }, Id { krate: 0, index: 56030 }], decl_id: None, docs: " text-overflow. Specifies rendering when inline content overflows its line box edge.\n", sig: None, attributes: [Attribute { value: "structural_match", span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073102, byte_end: 2073372, line_start: Row(171, PhantomData), line_end: Row(176, PhantomData), column_start: Column(1, PhantomData), column_end: Column(2, PhantomData) } }] }
DEBUG 2019-10-14T20:35:20Z: rust_indexer: Indexing def: DefId(GlobalCrateId { name: "style", disambiguator: (988834827071791058, 13408486560327807875) }, 55974) -> Def { kind: Struct, id: Id { krate: 0, index: 55974 }, span: SpanData { file_name: "servo\components\style\values\specified\text.rs", byte_start: 2073113, byte_end: 2073125, line_start: Row(171, PhantomData), line_end: Row(171, PhantomData), column_start: Column(12, PhantomData), column_end: Column(24, PhantomData) }, name: "TextOverflow", qualname: "style::values::specified::text::TextOverflow", value: "TextOverflow { first, second }", parent: None, children: [Id { krate: 0, index: 55975 }, Id { krate: 0, index: 55976 }], decl_id: None, docs: " text-overflow. Specifies rendering when inline content overflows its line box edge.\n", sig: None, attributes: [Attribute { value: "structural_match", span: SpanData { file_name: "servo\components\style\values\specified\text.rs", byte_start: 2073102, byte_end: 2073372, line_start: Row(171, PhantomData), line_end: Row(176, PhantomData), column_start: Column(1, PhantomData), column_end: Column(2, PhantomData) } }] }
DEBUG 2019-10-14T20:35:24Z: rust_indexer: Indexing def: DefId(GlobalCrateId { name: "style", disambiguator: (873712610437892590, 463794332490312197) }, 56079) -> Def { kind: Struct, id: Id { krate: 0, index: 56079 }, span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073113, byte_end: 2073125, line_start: Row(171, PhantomData), line_end: Row(171, PhantomData), column_start: Column(12, PhantomData), column_end: Column(24, PhantomData) }, name: "TextOverflow", qualname: "style::values::specified::text::TextOverflow", value: "TextOverflow { first, second }", parent: None, children: [Id { krate: 0, index: 56080 }, Id { krate: 0, index: 56081 }], decl_id: None, docs: " text-overflow. Specifies rendering when inline content overflows its line box edge.\n", sig: None, attributes: [Attribute { value: "structural_match", span: SpanData { file_name: "servo/components/style/values/specified/text.rs", byte_start: 2073102, byte_end: 2073372, line_start: Row(171, PhantomData), line_end: Row(176, PhantomData), column_start: Column(1, PhantomData), column_end: Column(2, PhantomData) } }] }
| Assignee | ||
Comment 14•6 years ago
|
||
My naive first thought would be that it might be best for us to run rust-analyze.sh once per platform outputting to the per-platform analysis directories and then run a merge on those instead of trying to process all 4 platforms in a single invocation. This would be more consistent with our longer term plan to stop using save-analysis and instead do things more like the clang plugin. It also would help make investigating rust failures more straightforward.
| Assignee | ||
Comment 15•6 years ago
|
||
Through some trial and error with bash scripting[1], pull requests up at https://github.com/mozsearch/mozsearch/pull/251 and https://github.com/mozsearch/mozsearch-mozilla/pull/59 which are the comment 14 solution.
I still plan to prepare a later patch for bullets 2 and 3 at the bottom of comment 8, but I wanted to make sure the rust analysis correctness issues were sorted out first. I'd like to apologize to those rust-focused searchfox users who were impacted by this for an extended period of time as I tried to dig in.
1: I find myself almost wishing we were using make, which is never a good sign.
| Assignee | ||
Updated•6 years ago
|
| Assignee | ||
Comment 17•6 years ago
|
||
The landing seems to have worked. The known failures were corrected last night by an out-of-cycle manual index triggering, and then today's normal post-nightly run seems to also have run successfully. If anyone is aware of any other reproductions of scrolling breakage, please chime in here. I'll try and prepare the final fixes over the weekend and will leave the bug open until those fixes land.
Disclaimer: Note that there's something weird and different going on with tokenizing in bug 1588908. Please report pages that aren't getting syntax highlighted there.
| Assignee | ||
Comment 18•5 years ago
|
||
I'm going to mark this fixed because a fix landed on the bug there hasn't been a recurrence that has necessitated the additional guards I was thinking of. (And we don't have the test fixture infrastructure that I'd want, and that should really be its own bug, etc.)
Description
•