@@ -609,6 +609,103 @@ fn extend_passed_via_config_argument() {
609
609
" ) ;
610
610
}
611
611
612
+ #[ test]
613
+ fn nonexistent_extend_file ( ) -> Result < ( ) > {
614
+ let tempdir = TempDir :: new ( ) ?;
615
+ fs:: write (
616
+ tempdir. path ( ) . join ( "ruff.toml" ) ,
617
+ r#"
618
+ extend = "ruff2.toml"
619
+ "# ,
620
+ ) ?;
621
+
622
+ insta:: with_settings!( {
623
+ filters => vec![ ( tempdir_filter( & tempdir) . as_str( ) , "[TMP]/" ) ]
624
+ } , {
625
+ assert_cmd_snapshot!( Command :: new( get_cargo_bin( BIN_NAME ) )
626
+ . args( [ "check" ] ) . current_dir( tempdir. path( ) ) , @r"
627
+ success: false
628
+ exit_code: 2
629
+ ----- stdout -----
630
+
631
+ ----- stderr -----
632
+ ruff failed
633
+ Cause: Failed to load last configuration in chain: [TMP]/ruff.toml -> [TMP]/ruff2.toml
634
+ Cause: Failed to read [TMP]/ruff2.toml
635
+ Cause: No such file or directory (os error 2)
636
+ " ) ;
637
+ } ) ;
638
+
639
+ fs:: write (
640
+ tempdir. path ( ) . join ( "ruff2.toml" ) ,
641
+ r#"
642
+ extend = "ruff3.toml"
643
+ "# ,
644
+ ) ?;
645
+
646
+ insta:: with_settings!( {
647
+ filters => vec![ ( tempdir_filter( & tempdir) . as_str( ) , "[TMP]/" ) ]
648
+ } , {
649
+ assert_cmd_snapshot!( Command :: new( get_cargo_bin( BIN_NAME ) )
650
+ . args( [ "check" ] ) . current_dir( tempdir. path( ) ) , @r"
651
+ success: false
652
+ exit_code: 2
653
+ ----- stdout -----
654
+
655
+ ----- stderr -----
656
+ ruff failed
657
+ Cause: Failed to load last configuration in chain: [TMP]/ruff.toml -> [TMP]/ruff2.toml -> [TMP]/ruff3.toml
658
+ Cause: Failed to read [TMP]/ruff3.toml
659
+ Cause: No such file or directory (os error 2)
660
+ " ) ;
661
+ } ) ;
662
+
663
+ Ok ( ( ) )
664
+ }
665
+
666
+ #[ test]
667
+ fn circular_extend ( ) -> Result < ( ) > {
668
+ let tempdir = TempDir :: new ( ) ?;
669
+ fs:: write (
670
+ tempdir. path ( ) . join ( "ruff.toml" ) ,
671
+ r#"
672
+ extend = "ruff2.toml"
673
+ "# ,
674
+ ) ?;
675
+ fs:: write (
676
+ tempdir. path ( ) . join ( "ruff2.toml" ) ,
677
+ r#"
678
+ extend = "ruff3.toml"
679
+ "# ,
680
+ ) ?;
681
+ fs:: write (
682
+ tempdir. path ( ) . join ( "ruff3.toml" ) ,
683
+ r#"
684
+ extend = "ruff.toml"
685
+ "# ,
686
+ ) ?;
687
+
688
+ insta:: with_settings!( {
689
+ filters => vec![ ( tempdir_filter( & tempdir) . as_str( ) , "[TMP]/" ) ]
690
+ } , {
691
+ assert_cmd_snapshot!(
692
+ Command :: new( get_cargo_bin( BIN_NAME ) )
693
+ . args( [ "check" ] )
694
+ . current_dir( tempdir. path( ) ) ,
695
+ @r"
696
+ success: false
697
+ exit_code: 2
698
+ ----- stdout -----
699
+
700
+ ----- stderr -----
701
+ ruff failed
702
+ Cause: Circular dependency detected in pyproject.toml: [TMP]/ruff.toml -> [TMP]/ruff2.toml -> [TMP]/ruff3.toml -> [TMP]/ruff.toml
703
+ " ) ;
704
+ } ) ;
705
+
706
+ Ok ( ( ) )
707
+ }
708
+
612
709
#[ test]
613
710
fn config_file_and_isolated ( ) -> Result < ( ) > {
614
711
let tempdir = TempDir :: new ( ) ?;
@@ -1993,6 +2090,7 @@ fn flake8_import_convention_invalid_aliases_config_alias_name() -> Result<()> {
1993
2090
1994
2091
----- stderr -----
1995
2092
ruff failed
2093
+ Cause: Failed to load last configuration in chain: [TMP]/ruff.toml
1996
2094
Cause: Failed to parse [TMP]/ruff.toml
1997
2095
Cause: TOML parse error at line 2, column 2
1998
2096
|
@@ -2029,6 +2127,7 @@ fn flake8_import_convention_invalid_aliases_config_extend_alias_name() -> Result
2029
2127
2030
2128
----- stderr -----
2031
2129
ruff failed
2130
+ Cause: Failed to load last configuration in chain: [TMP]/ruff.toml
2032
2131
Cause: Failed to parse [TMP]/ruff.toml
2033
2132
Cause: TOML parse error at line 2, column 2
2034
2133
|
@@ -2065,6 +2164,7 @@ fn flake8_import_convention_invalid_aliases_config_module_name() -> Result<()> {
2065
2164
2066
2165
----- stderr -----
2067
2166
ruff failed
2167
+ Cause: Failed to load last configuration in chain: [TMP]/ruff.toml
2068
2168
Cause: Failed to parse [TMP]/ruff.toml
2069
2169
Cause: TOML parse error at line 2, column 2
2070
2170
|
0 commit comments