@@ -134,36 +134,34 @@ fn verify_feature_enabled(
134
134
) ;
135
135
136
136
let message = if let Some ( span) =
137
- get_span ( manifest. document ( ) , & [ "lints" , "cargo" , lint_name] , false )
137
+ get_key_value_span ( manifest. document ( ) , & [ "lints" , "cargo" , lint_name] )
138
138
{
139
139
Level :: Error
140
140
. title ( & title)
141
141
. snippet (
142
142
Snippet :: source ( manifest. contents ( ) )
143
143
. origin ( & manifest_path)
144
- . annotation ( Level :: Error . span ( span) . label ( & label) )
144
+ . annotation ( Level :: Error . span ( span. key ) . label ( & label) )
145
145
. fold ( true ) ,
146
146
)
147
147
. footer ( Level :: Help . title ( & help) )
148
148
} else {
149
- let lint_span = get_span (
149
+ let lint_span = get_key_value_span (
150
150
ws_document,
151
151
& [ "workspace" , "lints" , "cargo" , lint_name] ,
152
- false ,
153
152
)
154
153
. unwrap_or_else ( || {
155
154
panic ! ( "could not find `cargo::{lint_name}` in `[lints]`, or `[workspace.lints]` " )
156
155
} ) ;
157
156
158
- let inherited_note = if let ( Some ( inherit_span_key) , Some ( inherit_span_value) ) = (
159
- get_span ( manifest. document ( ) , & [ "lints" , "workspace" ] , false ) ,
160
- get_span ( manifest. document ( ) , & [ "lints" , "workspace" ] , true ) ,
161
- ) {
157
+ let inherited_note = if let Some ( inherit_span) =
158
+ get_key_value_span ( manifest. document ( ) , & [ "lints" , "workspace" ] )
159
+ {
162
160
Level :: Note . title ( & second_title) . snippet (
163
161
Snippet :: source ( manifest. contents ( ) )
164
162
. origin ( & manifest_path)
165
163
. annotation (
166
- Level :: Note . span ( inherit_span_key . start ..inherit_span_value . end ) ,
164
+ Level :: Note . span ( inherit_span . key . start ..inherit_span . value . end ) ,
167
165
)
168
166
. fold ( true ) ,
169
167
)
@@ -176,7 +174,7 @@ fn verify_feature_enabled(
176
174
. snippet (
177
175
Snippet :: source ( ws_contents)
178
176
. origin ( & ws_path)
179
- . annotation ( Level :: Error . span ( lint_span) . label ( & label) )
177
+ . annotation ( Level :: Error . span ( lint_span. key ) . label ( & label) )
180
178
. fold ( true ) ,
181
179
)
182
180
. footer ( inherited_note)
@@ -189,22 +187,26 @@ fn verify_feature_enabled(
189
187
Ok ( ( ) )
190
188
}
191
189
192
- pub fn get_span (
190
+ #[ derive( Clone ) ]
191
+ pub struct TomlSpan {
192
+ pub key : Range < usize > ,
193
+ pub value : Range < usize > ,
194
+ }
195
+
196
+ pub fn get_key_value_span (
193
197
document : & toml:: Spanned < toml:: de:: DeTable < ' static > > ,
194
198
path : & [ & str ] ,
195
- get_value : bool ,
196
- ) -> Option < Range < usize > > {
199
+ ) -> Option < TomlSpan > {
197
200
let mut table = document. get_ref ( ) ;
198
201
let mut iter = path. into_iter ( ) . peekable ( ) ;
199
202
while let Some ( key) = iter. next ( ) {
200
203
let key_s: & str = key. as_ref ( ) ;
201
204
let ( key, item) = table. get_key_value ( key_s) ?;
202
205
if iter. peek ( ) . is_none ( ) {
203
- return if get_value {
204
- Some ( item. span ( ) )
205
- } else {
206
- Some ( key. span ( ) )
207
- } ;
206
+ return Some ( TomlSpan {
207
+ key : key. span ( ) ,
208
+ value : item. span ( ) ,
209
+ } ) ;
208
210
}
209
211
if let Some ( next_table) = item. get_ref ( ) . as_table ( ) {
210
212
table = next_table;
@@ -213,7 +215,10 @@ pub fn get_span(
213
215
if let Some ( array) = item. get_ref ( ) . as_array ( ) {
214
216
let next = iter. next ( ) . unwrap ( ) ;
215
217
return array. iter ( ) . find_map ( |item| match item. get_ref ( ) {
216
- toml:: de:: DeValue :: String ( s) if s == next => Some ( item. span ( ) ) ,
218
+ toml:: de:: DeValue :: String ( s) if s == next => Some ( TomlSpan {
219
+ key : key. span ( ) ,
220
+ value : item. span ( ) ,
221
+ } ) ,
217
222
_ => None ,
218
223
} ) ;
219
224
}
@@ -455,14 +460,14 @@ pub fn check_im_a_teapot(
455
460
let manifest_path = rel_cwd_manifest_path ( path, gctx) ;
456
461
let emitted_reason = IM_A_TEAPOT . emitted_source ( lint_level, reason) ;
457
462
458
- let key_span = get_span ( manifest. document ( ) , & [ "package" , "im-a-teapot" ] , false ) . unwrap ( ) ;
459
- let value_span = get_span ( manifest . document ( ) , & [ "package" , "im-a-teapot" ] , true ) . unwrap ( ) ;
463
+ let span = get_key_value_span ( manifest. document ( ) , & [ "package" , "im-a-teapot" ] ) . unwrap ( ) ;
464
+
460
465
let message = level
461
466
. title ( IM_A_TEAPOT . desc )
462
467
. snippet (
463
468
Snippet :: source ( manifest. contents ( ) )
464
469
. origin ( & manifest_path)
465
- . annotation ( level. span ( key_span . start ..value_span . end ) )
470
+ . annotation ( level. span ( span . key . start ..span . value . end ) )
466
471
. fold ( true ) ,
467
472
)
468
473
. footer ( Level :: Note . title ( & emitted_reason) ) ;
@@ -542,33 +547,31 @@ fn output_unknown_lints(
542
547
}
543
548
544
549
let mut message = if let Some ( span) =
545
- get_span ( manifest. document ( ) , & [ "lints" , "cargo" , lint_name] , false )
550
+ get_key_value_span ( manifest. document ( ) , & [ "lints" , "cargo" , lint_name] )
546
551
{
547
552
level. title ( & title) . snippet (
548
553
Snippet :: source ( manifest. contents ( ) )
549
554
. origin ( & manifest_path)
550
- . annotation ( Level :: Error . span ( span) )
555
+ . annotation ( Level :: Error . span ( span. key ) )
551
556
. fold ( true ) ,
552
557
)
553
558
} else {
554
- let lint_span = get_span (
559
+ let lint_span = get_key_value_span (
555
560
ws_document,
556
561
& [ "workspace" , "lints" , "cargo" , lint_name] ,
557
- false ,
558
562
)
559
563
. unwrap_or_else ( || {
560
564
panic ! ( "could not find `cargo::{lint_name}` in `[lints]`, or `[workspace.lints]` " )
561
565
} ) ;
562
566
563
- let inherited_note = if let ( Some ( inherit_span_key) , Some ( inherit_span_value) ) = (
564
- get_span ( manifest. document ( ) , & [ "lints" , "workspace" ] , false ) ,
565
- get_span ( manifest. document ( ) , & [ "lints" , "workspace" ] , true ) ,
566
- ) {
567
+ let inherited_note = if let Some ( inherit_span) =
568
+ get_key_value_span ( manifest. document ( ) , & [ "lints" , "workspace" ] )
569
+ {
567
570
Level :: Note . title ( & second_title) . snippet (
568
571
Snippet :: source ( manifest. contents ( ) )
569
572
. origin ( & manifest_path)
570
573
. annotation (
571
- Level :: Note . span ( inherit_span_key . start ..inherit_span_value . end ) ,
574
+ Level :: Note . span ( inherit_span . key . start ..inherit_span . value . end ) ,
572
575
)
573
576
. fold ( true ) ,
574
577
)
@@ -580,7 +583,7 @@ fn output_unknown_lints(
580
583
level. title ( & title) . snippet (
581
584
Snippet :: source ( ws_contents)
582
585
. origin ( & ws_path)
583
- . annotation ( Level :: Error . span ( lint_span) )
586
+ . annotation ( Level :: Error . span ( lint_span. key ) )
584
587
. fold ( true ) ,
585
588
)
586
589
} ;
0 commit comments