Enforces padding around afterAll blocks.
✅ This rule is included in the vitest preset.
Blank lines around afterAll() blocks make teardown code easier to spot when scanning a test file.
They also keep long-lived cleanup logic visually separated from neighboring test setup and suite definitions.
AEimpo53 { afterAll, 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>AEconsB0servAE =< {d ivclassNa="meec-li">nt< sp ansty="le--0:#82AAFF;--1:#3B61">B0clo sp>11<()sp ansty="le--0:#C792EA;--1:#8844">AE {()sp> {d><},d ivclassNa="meec-li">A5},d><3;d ivclassNa="meec-li">B0afterA5<3(sp ansty="le--0:#D9F5DD;--1:#1111">113(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">53< sp ansty="le--0:#D6DEEB;--1:#403F">53serv sp>AB0clo53( {d><);d ivclassNa="meec-li">53});d><);d ivclassNa="meec-li">B0descri5<3(sp ansty="le--0:#D9F5DD;--1:#1111">13(sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Dserv1"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="meco"> { server.close();});describe("server", () => {}"><);d>);d>);d>AEimpo53 { afterAll, 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>B0descri5<3(sp ansty="le--0:#D9F5DD;--1:#1111">13(sp><1"sp ansty="le--0:#ECC48D;--1:#984E">4Dwork1"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:#C792EA;--1:#8844">AEcons sp>B0cacAE = {d>< {d ivclassNa="meec-li">nt < sp ansty="le--0:#82AAFF;--1:#3B61">B0cle sp>11<()sp ansty="le--0:#C792EA;--1:#8844">AE {()sp> {d><},d ivclassNa="meec-li">AE< sp ansty="le--0:#C792EA;--1:#8844">A sp>5},d><3;d ivclassNa="meec-li">nt< sp ansty="le--0:#C792EA;--1:#8844">AEcons sp>B0queAE =3;d>< {d ivclassNa="meec-li">nt < sp ansty="le--0:#82AAFF;--1:#3B61">B0st sp>11<()sp ansty="le--0:#C792EA;--1:#8844">AE {()sp> {d><},d ivclassNa="meec-li">AE< sp ansty="le--0:#C792EA;--1:#8844">A sp>5},d><3;d ivclassNa="meec-li">nt< sp ansty="le--0:#82AAFF;--1:#3B61">B0afterA sp>5<3(sp ansty="le--0:#D9F5DD;--1:#1111">113(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">53 < sp ansty="le--0:#D6DEEB;--1:#403F">53cac sp>AB0cle53( {d><);d ivclassNa="meec-li">53< sp ansty="le--0:#D6DEEB;--1:#403F">53} sp>);d><);d ivclassNa="meec-li">nt< sp ansty="le--0:#82AAFF;--1:#3B61">B0afterA sp>5<3(sp ansty="le--0:#D9F5DD;--1:#1111">113(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">53 < sp ansty="le--0:#D6DEEB;--1:#403F">53que sp>AB0st53( {d><);d ivclassNa="meec-li">53< sp ansty="le--0:#D6DEEB;--1:#403F">53} sp>);d><);d ivclassNa="meec-li">53});d><);d ivclassNa="meco"> { const cache = { clear() {}, }; const queue = { stop() {}, }; afterAll(() => { cache.clear(); }); afterAll(() => { queue.stop(); });}"><);d>);d>);d> 44AEim3F53 { afterAll, describ44AE31<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dvi111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3111">c44AEco61B0se44AE< = {divclass="Nameec-">de61B0c11<11() spans="tyle--0:#C792EA;--1:#88">44AE11()> = >< {} ,divclass="Nameec-">4<4AE} spans="tyle--0:#D6DEEB;--1:#40">34AE}> {}>c61B0afte311<11() spans="tyle--0:#D6DEEB;--1:#40">311()>44 spans="tyle--0:#D6DEEB;--1:#40">3F><53 {divclass="Nameec-">3F<53 spans="tyle--0:#D6DEEB;--1:#40">3F53se53 >4<4AE. spans="tyle--0:#82AAFF;--1:#3B">61B0c4AE.>3F553 ><3() ;divclass="Nameec-">3F53()><3}) ;divclass="Nameec-">c3})>61B0desc31<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dse111">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">3F53 ><{}) ;divclass="Name"> { server.close();});describe("server", () => "><{})>{})>{})><;di vdivclass="Nameexpressive-">44AEim3F53 { afterAll, describ44AE31<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dvi111">1<111" spans="tyle--0:#D6DEEB;--1:#40">3111">c61B0desc31<111" spans="tyle--0:#ECC48D;--1:#98">4E4Dwo111">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-">de44AEco61B0c44AE53 >< = {divclass="Nameec-">dent< spans="tyle--0:#82AAFF;--1:#3B">61B0c >11<11() spans="tyle--0:#C792EA;--1:#88">44AE11()> = >< {} ,divclass="Nameec-">444<4AE} spans="tyle--0:#D6DEEB;--1:#40">34AE}> {}>de44AEco61B0q44AE< = {divclass="Nameec-">dent< spans="tyle--0:#82AAFF;--1:#3B">61B0 >11<11() spans="tyle--0:#C792EA;--1:#88">44AE11()> = >< {} ,divclass="Nameec-">444<4AE} spans="tyle--0:#D6DEEB;--1:#40">34AE}> {}>cde61B0afte311<11() spans="tyle--0:#D6DEEB;--1:#40">311()>44 spans="tyle--0:#D6DEEB;--1:#40">3F><53 {divclass="Nameec-">3F53< spans="tyle--0:#D6DEEB;--1:#40">3F53c >4<4AE. spans="tyle--0:#82AAFF;--1:#3B">61B0c4AE.>3F553 ><3() ;divclass="Nameec-">3F<53 spans="tyle--0:#D6DEEB;--1:#40">3F553 >3()><3}) ;divclass="Nameec-">c3})>de61B0afte311<11() spans="tyle--0:#D6DEEB;--1:#40">311()>44 spans="tyle--0:#D6DEEB;--1:#40">3F><53 {divclass="Nameec-">3F53< spans="tyle--0:#D6DEEB;--1:#40">3F53q >4<4AE. spans="tyle--0:#82AAFF;--1:#3B">61B04AE.>3F553 ><3() ;divclass="Nameec-">3F<53 spans="tyle--0:#D6DEEB;--1:#40">3F553 >3()><3}) ;divclass="Nameec-">3F53})><3}) ;divclass="Name"> { const cache = { clear() {}, }; const queue = { stop() {}, }; afterAll(() => { cache.clear(); }); afterAll(() => { queue.stop(); });"><})>})>3})>;di>
This rule is not configurable.
If your team intentionally keeps afterAll() hooks tightly grouped with surrounding setup or suite declarations, the extra blank lines from this rule might add more vertical space than value.
That can be reasonable in very small test files where the teardown flow is already obvious.