@@ -54,6 +54,7 @@ use rules::renaming_table;
5454use rules:: require_concurrent_index_creation;
5555use rules:: require_concurrent_index_deletion;
5656use rules:: require_enum_value_ordering;
57+ use rules:: require_table_schema;
5758use rules:: require_timeout_settings;
5859use rules:: transaction_nesting;
5960// xtask:new-rule:rule-import
@@ -92,9 +93,18 @@ pub enum Rule {
9293 RequireTimeoutSettings ,
9394 BanUncommittedTransaction ,
9495 RequireEnumValueOrdering ,
96+ RequireTableSchema ,
9597 // xtask:new-rule:error-name
9698}
9799
100+ impl Rule {
101+ /// Rules that are opt-in are not enabled by default.
102+ /// They must be explicitly included via configuration.
103+ pub fn is_opt_in ( & self ) -> bool {
104+ matches ! ( self , Rule :: RequireTableSchema )
105+ }
106+ }
107+
98108impl TryFrom < & str > for Rule {
99109 type Error = String ;
100110
@@ -135,6 +145,7 @@ impl TryFrom<&str> for Rule {
135145 "require-timeout-settings" => Ok ( Rule :: RequireTimeoutSettings ) ,
136146 "ban-uncommitted-transaction" => Ok ( Rule :: BanUncommittedTransaction ) ,
137147 "require-enum-value-ordering" => Ok ( Rule :: RequireEnumValueOrdering ) ,
148+ "require-table-schema" => Ok ( Rule :: RequireTableSchema ) ,
138149 // xtask:new-rule:str-name
139150 _ => Err ( format ! ( "Unknown violation name: {s}" ) ) ,
140151 }
@@ -198,6 +209,7 @@ impl fmt::Display for Rule {
198209 Rule :: RequireTimeoutSettings => "require-timeout-settings" ,
199210 Rule :: BanUncommittedTransaction => "ban-uncommitted-transaction" ,
200211 Rule :: RequireEnumValueOrdering => "require-enum-value-ordering" ,
212+ Rule :: RequireTableSchema => "require-table-schema" ,
201213 // xtask:new-rule:variant-to-name
202214 } ;
203215 write ! ( f, "{val}" )
@@ -428,6 +440,9 @@ impl Linter {
428440 if self . rules . contains ( & Rule :: RequireEnumValueOrdering ) {
429441 require_enum_value_ordering ( self , file) ;
430442 }
443+ if self . rules . contains ( & Rule :: RequireTableSchema ) {
444+ require_table_schema ( self , file) ;
445+ }
431446 // xtask:new-rule:rule-call
432447
433448 // locate any ignores in the file
@@ -452,12 +467,16 @@ impl Linter {
452467 }
453468
454469 pub fn with_all_rules ( ) -> Self {
455- let rules = all :: < Rule > ( ) . collect :: < FxHashSet < _ > > ( ) ;
470+ let rules = all :: < Rule > ( )
471+ . filter ( |r| !r. is_opt_in ( ) )
472+ . collect :: < FxHashSet < _ > > ( ) ;
456473 Linter :: from ( rules)
457474 }
458475
459476 pub fn without_rules ( exclude : & [ Rule ] ) -> Self {
460- let all_rules = all :: < Rule > ( ) . collect :: < FxHashSet < _ > > ( ) ;
477+ let all_rules = all :: < Rule > ( )
478+ . filter ( |r| !r. is_opt_in ( ) )
479+ . collect :: < FxHashSet < _ > > ( ) ;
461480 let mut exclude_set = FxHashSet :: with_capacity_and_hasher ( exclude. len ( ) , FxBuildHasher ) ;
462481 for e in exclude {
463482 exclude_set. insert ( e) ;
0 commit comments