@@ -247,9 +247,39 @@ pub fn check_im_a_teapot(
247
247
gctx : & GlobalContext ,
248
248
) -> CargoResult < ( ) > {
249
249
let manifest = pkg. manifest ( ) ;
250
+ let manifest_path = rel_cwd_manifest_path ( path, gctx) ;
250
251
let ( lint_level, reason) = IM_A_TEAPOT . level ( pkg_lints, ws_lints, manifest. edition ( ) ) ;
251
252
252
253
if IM_A_TEAPOT . is_feature_gated ( manifest) {
254
+ if reason == LintLevelReason :: Package || reason == LintLevelReason :: Workspace {
255
+ * error_count += 1 ;
256
+ let span = get_span (
257
+ manifest. document ( ) ,
258
+ & [ "lints" , "cargo" , "im-a-teapot" ] ,
259
+ false ,
260
+ )
261
+ . or ( get_span (
262
+ manifest. document ( ) ,
263
+ & [ "lints" , "cargo" , "im_a_teapot" ] ,
264
+ false ,
265
+ ) )
266
+ . unwrap ( ) ;
267
+ let message = Level :: Error
268
+ . title ( "use of unstable lint `im-a-teapot`" )
269
+ . snippet (
270
+ Snippet :: source ( manifest. contents ( ) )
271
+ . origin ( & manifest_path)
272
+ . annotation ( Level :: Error . span ( span) )
273
+ . fold ( true ) ,
274
+ ) ;
275
+ let renderer = Renderer :: styled ( ) . term_width (
276
+ gctx. shell ( )
277
+ . err_width ( )
278
+ . diagnostic_terminal_width ( )
279
+ . unwrap_or ( annotate_snippets:: renderer:: DEFAULT_TERM_WIDTH ) ,
280
+ ) ;
281
+ writeln ! ( gctx. shell( ) . err( ) , "{}" , renderer. render( message) ) ?;
282
+ }
253
283
return Ok ( ( ) ) ;
254
284
}
255
285
@@ -266,7 +296,6 @@ pub fn check_im_a_teapot(
266
296
* error_count += 1 ;
267
297
}
268
298
let level = lint_level. to_diagnostic_level ( ) ;
269
- let manifest_path = rel_cwd_manifest_path ( path, gctx) ;
270
299
let emitted_reason = format ! (
271
300
"`cargo::{}` is set to `{lint_level}` {reason}" ,
272
301
IM_A_TEAPOT . name
0 commit comments