Enforces padding around describe blocks.
✅ This rule is included in the vitest preset.
Blank lines around describe() blocks make suite boundaries easier to recognize.
That helps nested suites read like separate sections instead of blending into surrounding setup and declarations.
This rule also applies to suite(), Vitest’s alias for describe().
AEimpo53 { describe <} sp ansty="le--0:#C792EA;--1:#8844">AEfr} sp>5<3 sp ansty="le--0:#D9F5DD;--1:#1111">13 sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Dvite1"sp>1<1"sp ansty="le--0:#D6DEEB;--1:#403F">51"sp><3;d ivclassNa="meec-li">d3;d>AEconsB0suiteNaAE <= sp ansty="le--0:#D9F5DD;--1:#1111">1= sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Dte1"sp>1<1"sp ansty="le--0:#D6DEEB;--1:#403F">51"sp><3;d ivclassNa="meec-li">76// A comment before descri3;d>B0descri53(suiteName<, sp ansty="le--0:#D9F5DD;--1:#1111">11, sp><()sp ansty="le--0:#D6DEEB;--1:#403F">5()sp><3 sp ansty="le--0:#C792EA;--1:#8844">AE3 sp><=>sp ansty="le--0:#D6DEEB;--1:#403F">53=>sp>< {d ivclassNa="meec-li">nt< sp ansty="le--0:#82AAFF;--1:#3B61">B0descri sp>5<3(sp ansty="le--0:#D9F5DD;--1:#1111">13(sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Dtrimm1"sp>1<1"sp ansty="le--0:#D6DEEB;--1:#403F">531"sp><, sp ansty="le--0:#D9F5DD;--1:#1111">11, sp><()sp ansty="le--0:#D6DEEB;--1:#403F">5()sp><3 sp ansty="le--0:#C792EA;--1:#8844">AE3 sp><=>sp ansty="le--0:#D6DEEB;--1:#403F">53=>sp> {d>< {d ivclassNa="meec-li">nt < sp ansty="le--0:#919F9F;--1:#5D63">76// . sp> {d><..d ivclassNa="meec-li">53< sp ansty="le--0:#D6DEEB;--1:#403F">53} sp><);d ivclassNa="meec-li">nt< sp ansty="le--0:#82AAFF;--1:#3B61">B0descri sp>5<3(sp ansty="le--0:#D9F5DD;--1:#1111">13(sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Dr1"sp>1<1"sp ansty="le--0:#D6DEEB;--1:#403F">531"sp><, sp ansty="le--0:#D9F5DD;--1:#1111">11, sp><()sp ansty="le--0:#D6DEEB;--1:#403F">5()sp><3 sp ansty="le--0:#C792EA;--1:#8844">AE3 sp><=>sp ansty="le--0:#D6DEEB;--1:#403F">53=>sp>);d>< {d ivclassNa="meec-li">nt < sp ansty="le--0:#919F9F;--1:#5D63">76// . sp> {d><..d ivclassNa="meec-li">53< sp ansty="le--0:#D6DEEB;--1:#403F">53} sp><);d ivclassNa="meec-li">53});d><);d ivclassNa="meec-li">53descriAB0sk5<3(sp ansty="le--0:#D9F5DD;--1:#1111">13(sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Dskipp1"sp>1<1"sp ansty="le--0:#D6DEEB;--1:#403F">531"sp><, sp ansty="le--0:#D9F5DD;--1:#1111">11, sp><()sp ansty="le--0:#D6DEEB;--1:#403F">5()sp><3 sp ansty="le--0:#C792EA;--1:#8844">AE3 sp><=>sp ansty="le--0:#D6DEEB;--1:#403F">53=>sp>);d>< {d ivclassNa="meec-li">nt< sp ansty="le--0:#919F9F;--1:#5D63">76// . sp> {d><..d ivclassNa="meec-li">53}<);d ivclassNa="meco"> { describe("trimmed", () => { // ... }); describe("raw", () => { // ... });});describe.skip("skipped", () => { // ...}"><);d>);d>);d>AEimpo53 { describe <} sp ansty="le--0:#C792EA;--1:#8844">AEfr} sp>5<3 sp ansty="le--0:#D9F5DD;--1:#1111">13 sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Dvite1"sp>1<1"sp ansty="le--0:#D6DEEB;--1:#403F">51"sp><3;d ivclassNa="meec-li">d3;d>53descriAB0on5<3(sp ansty="le--0:#D9F5DD;--1:#1111">13(sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Dfocus1"sp>1<1"sp ansty="le--0:#D6DEEB;--1:#403F">531"sp><, sp ansty="le--0:#D9F5DD;--1:#1111">11, sp><()sp ansty="le--0:#D6DEEB;--1:#403F">5()sp><3 sp ansty="le--0:#C792EA;--1:#8844">AE3 sp><=>sp ansty="le--0:#D6DEEB;--1:#403F">53=>sp>< {d ivclassNa="meec-li">nt< sp ansty="le--0:#919F9F;--1:#5D63">76// . sp> {d><..d ivclassNa="meec-li">53}<);d ivclassNa="meec-li">53descriAB0sk5<3(sp ansty="le--0:#D9F5DD;--1:#1111">13(sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Dlat1"sp>1<1"sp ansty="le--0:#D6DEEB;--1:#403F">531"sp><, sp ansty="le--0:#D9F5DD;--1:#1111">11, sp><()sp ansty="le--0:#D6DEEB;--1:#403F">5()sp><3 sp ansty="le--0:#C792EA;--1:#8844">AE3 sp><=>sp ansty="le--0:#D6DEEB;--1:#403F">53=>sp>);d>< {d ivclassNa="meec-li">nt< sp ansty="le--0:#919F9F;--1:#5D63">76// . sp> {d><..d ivclassNa="meec-li">53}<);d ivclassNa="meec-li">AEconsB0skippedNaAE <= sp ansty="le--0:#D9F5DD;--1:#1111">1= sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Danoth1"sp>1<1"sp ansty="le--0:#D6DEEB;--1:#403F">51"sp>);d><3;d ivclassNa="meec-li">53descriAB0sk53(skippedName<, sp ansty="le--0:#D9F5DD;--1:#1111">11, sp><()sp ansty="le--0:#D6DEEB;--1:#403F">5()sp><3 sp ansty="le--0:#C792EA;--1:#8844">AE3 sp><=>sp ansty="le--0:#D6DEEB;--1:#403F">53=>sp>3;d>< {d ivclassNa="meec-li">nt< sp ansty="le--0:#919F9F;--1:#5D63">76// . sp> {d><..d ivclassNa="meec-li">53}<);d ivclassNa="meco"> { // ...});describe.skip("later", () => { // ...});const skippedName = "another";describe.skip(skippedName, () => { // ...}"><);d>);d>);d> 44AEim3F53 { describ44AE31<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dvi111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3111">c44AEco61B0suite44A1<111" spans="tyle--0:#ECC48D;--1:#98">4E4D111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3111">c6376// A comment before desc61B0desc3F53(suiteNa11<11() spans="tyle--0:#D6DEEB;--1:#40">311()>44 spans="tyle--0:#D6DEEB;--1:#40">3F><53 {divclass="Nameec-">de61B0desc31<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dtri111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3F111"><53, spans="tyle--0:#D9F5DD;--1:#11">1153, ><11() spans="tyle--0:#D6DEEB;--1:#40">311()>44 spans="tyle--0:#D6DEEB;--1:#40">3F>53 ><53 {divclass="Nameec-">dent< spans="tyle--0:#919F9F;--1:#5D">6376// >53 >< .. .divclass="Nameec-">3F<53 spans="tyle--0:#D6DEEB;--1:#40">3F553 > ..><3}) ;divclass="Nameec-">c3})>de61B0desc31<111" spans="tyle--0:#ECC48D;--1:#98">4E4111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3F111"><53, spans="tyle--0:#D9F5DD;--1:#11">1153, ><11() spans="tyle--0:#D6DEEB;--1:#40">311()>44 spans="tyle--0:#D6DEEB;--1:#40">3F><53 {divclass="Nameec-">dent< spans="tyle--0:#919F9F;--1:#5D">6376// >53 >< .. .divclass="Nameec-">3F<53 spans="tyle--0:#D6DEEB;--1:#40">3F553 > ..><3}) ;divclass="Nameec-">3F53})><3}) ;divclass="Nameec-">c3})>3F53desc4<4AE. spans="tyle--0:#82AAFF;--1:#3B">61B04AE.>31<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dski111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3F111"><53, spans="tyle--0:#D9F5DD;--1:#11">1153, ><11() spans="tyle--0:#D6DEEB;--1:#40">311()>44 spans="tyle--0:#D6DEEB;--1:#40">3F><53 {divclass="Nameec-">de6376//53 >< .. .divclass="Nameec-">3F5 ..><3}) ;divclass="Name"> { describe("trimmed", () => { // ... }); describe("raw", () => { // ... });});describe.skip("skipped", () => { // ..."><})>})>3})><;di vdivclass="Nameexpressive-">44AEim3F53 { describ44AE31<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dvi111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3111">c3F53desc4<4AE. spans="tyle--0:#82AAFF;--1:#3B">61B04AE.>31<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dfoc111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3F111"><53, spans="tyle--0:#D9F5DD;--1:#11">1153, ><11() spans="tyle--0:#D6DEEB;--1:#40">311()>44 spans="tyle--0:#D6DEEB;--1:#40">3F><53 {divclass="Nameec-">de6376//53 >< .. .divclass="Nameec-">3F5 ..><3}) ;divclass="Nameec-">c3})>3F53desc4<4AE. spans="tyle--0:#82AAFF;--1:#3B">61B04AE.>31<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dl111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3F111"><53, spans="tyle--0:#D9F5DD;--1:#11">1153, ><11() spans="tyle--0:#D6DEEB;--1:#40">311()>44 spans="tyle--0:#D6DEEB;--1:#40">3F><53 {divclass="Nameec-">de6376//53 >< .. .divclass="Nameec-">3F5 ..><3}) ;divclass="Nameec-">c3})>44AEco61B0skipped44A1<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dano111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3111">c3F53desc4<4AE. spans="tyle--0:#82AAFF;--1:#3B">61B04AE.>3F53(skippedNa11<11() spans="tyle--0:#D6DEEB;--1:#40">311()>44 spans="tyle--0:#D6DEEB;--1:#40">3F><53 {divclass="Nameec-">de6376//53 >< .. .divclass="Nameec-">3F5 ..><3}) ;divclass="Name"> { // ...});describe.skip("later", () => { // ...});const skippedName = "another";describe.skip(skippedName, () => { // ..."><})>})>3})>;di>
This rule is not configurable.
If your team intentionally treats small describe() blocks like inline grouping rather than visual sections, the added blank lines may feel too spread out.
That can be reasonable in short files with only one or two tiny suites.