[{"data":1,"prerenderedAt":1211},["ShallowReactive",2],{"navigation_docs_en":3,"-en-eslint-config-advanced":46,"-en-eslint-config-advanced-surround":1206},[4,31,36,41],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"ESLint Config","\u002Fen\u002Feslint-config","en\u002F1.eslint-config\u002F1.index",[9,11,15,19,23,27],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-shield-check",{"title":12,"path":13,"stem":14},"Package JSON Lint","\u002Fen\u002Feslint-config\u002Fpackage-json","en\u002F1.eslint-config\u002F2.package-json",{"title":16,"path":17,"stem":18},"Nuxt Integration","\u002Fen\u002Feslint-config\u002Fnuxt","en\u002F1.eslint-config\u002F3.nuxt",{"title":20,"path":21,"stem":22},"Framework Integrations","\u002Fen\u002Feslint-config\u002Fframeworks","en\u002F1.eslint-config\u002F4.frameworks",{"title":24,"path":25,"stem":26},"Advanced Usage","\u002Fen\u002Feslint-config\u002Fadvanced","en\u002F1.eslint-config\u002F5.advanced",{"title":28,"path":29,"stem":30},"Editor & CI Integration","\u002Fen\u002Feslint-config\u002Feditor","en\u002F1.eslint-config\u002F6.editor",{"title":32,"path":33,"stem":34,"icon":35},"Prettier Config","\u002Fen\u002Fprettier-config","en\u002F2.prettier-config","i-lucide-paintbrush",{"title":37,"path":38,"stem":39,"icon":40},"EditorConfig","\u002Fen\u002Feditorconfig","en\u002F3.editorconfig","i-lucide-file-cog",{"title":42,"path":43,"stem":44,"icon":45},"CLI","\u002Fen\u002Fcli","en\u002F4.cli","i-lucide-terminal",{"id":47,"title":24,"body":48,"description":1200,"extension":1201,"links":1202,"meta":1203,"navigation":119,"path":25,"seo":1204,"stem":26,"__hash__":1205},"docs_en\u002Fen\u002F1.eslint-config\u002F5.advanced.md",{"type":49,"value":50,"toc":1190},"minimark",[51,55,60,77,185,189,193,207,423,426,453,460,473,476,526,535,538,631,637,700,703,707,716,865,868,992,996,1007,1023,1026,1030,1039,1124,1128,1142,1147,1161,1166,1177,1186],[52,53,24],"h1",{"id":54},"advanced-usage",[56,57,59],"h2",{"id":58},"type-aware-rules","Type Aware Rules",[61,62,63,64,71,72,76],"p",{},"Some of the strongest TypeScript lint rules require type information — they need to resolve what a value actually is at runtime, not just what its local syntax looks like. Opt into ",[65,66,70],"a",{"href":67,"rel":68},"https:\u002F\u002Ftypescript-eslint.io\u002Flinting\u002Ftyped-linting\u002F",[69],"nofollow","type-aware linting"," by pointing at your ",[73,74,75],"code",{},"tsconfig.json",":",[78,79,85],"pre",{"className":80,"code":81,"filename":82,"language":83,"meta":84,"style":84},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import pleaseai from '@pleaseai\u002Feslint-config'\n\nexport default pleaseai({\n  typescript: {\n    tsconfigPath: 'tsconfig.json',\n  },\n})\n","eslint.config.ts","ts","",[73,86,87,114,121,140,152,170,176],{"__ignoreMap":84},[88,89,92,96,100,103,107,111],"span",{"class":90,"line":91},"line",1,[88,93,95],{"class":94},"s7zQu","import",[88,97,99],{"class":98},"sTEyZ"," pleaseai ",[88,101,102],{"class":94},"from",[88,104,106],{"class":105},"sMK4o"," '",[88,108,110],{"class":109},"sfazB","@pleaseai\u002Feslint-config",[88,112,113],{"class":105},"'\n",[88,115,117],{"class":90,"line":116},2,[88,118,120],{"emptyLinePlaceholder":119},true,"\n",[88,122,124,127,130,134,137],{"class":90,"line":123},3,[88,125,126],{"class":94},"export",[88,128,129],{"class":94}," default",[88,131,133],{"class":132},"s2Zo4"," pleaseai",[88,135,136],{"class":98},"(",[88,138,139],{"class":105},"{\n",[88,141,143,147,149],{"class":90,"line":142},4,[88,144,146],{"class":145},"swJcz","  typescript",[88,148,76],{"class":105},[88,150,151],{"class":105}," {\n",[88,153,155,158,160,162,164,167],{"class":90,"line":154},5,[88,156,157],{"class":145},"    tsconfigPath",[88,159,76],{"class":105},[88,161,106],{"class":105},[88,163,75],{"class":109},[88,165,166],{"class":105},"'",[88,168,169],{"class":105},",\n",[88,171,173],{"class":90,"line":172},6,[88,174,175],{"class":105},"  },\n",[88,177,179,182],{"class":90,"line":178},7,[88,180,181],{"class":105},"}",[88,183,184],{"class":98},")\n",[186,187,188],"warning",{},"Type-aware linting is slower than syntax-only linting because ESLint has to build a TypeScript program for every run. Start with it on small\u002Fmedium projects; for very large monorepos consider scoping it to a subset of files.",[56,190,192],{"id":191},"config-composer","Config Composer",[61,194,195,198,199,206],{},[73,196,197],{},"pleaseai()"," returns a ",[65,200,203],{"href":201,"rel":202},"https:\u002F\u002Fgithub.com\u002Fantfu\u002Feslint-flat-config-utils#composer",[69],[73,204,205],{},"FlatConfigComposer",", so you can fluently override, prepend, remove, or rename named config blocks when the plain options object isn't granular enough:",[78,208,210],{"className":80,"code":209,"filename":82,"language":83,"meta":84,"style":84},"import pleaseai from '@pleaseai\u002Feslint-config'\n\nexport default pleaseai()\n  .prepend(\n    \u002F\u002F flat configs before the main PleaseAI config\n  )\n  .override('antfu\u002Fstylistic\u002Frules', {\n    rules: {\n      'style\u002Fgenerator-star-spacing': ['error', { after: true, before: false }],\n    },\n  })\n  .renamePlugins({\n    'old-prefix': 'new-prefix',\n  })\n  .remove('antfu\u002Fstylistic')\n",[73,211,212,226,230,241,252,258,263,284,294,349,355,363,375,397,404],{"__ignoreMap":84},[88,213,214,216,218,220,222,224],{"class":90,"line":91},[88,215,95],{"class":94},[88,217,99],{"class":98},[88,219,102],{"class":94},[88,221,106],{"class":105},[88,223,110],{"class":109},[88,225,113],{"class":105},[88,227,228],{"class":90,"line":116},[88,229,120],{"emptyLinePlaceholder":119},[88,231,232,234,236,238],{"class":90,"line":123},[88,233,126],{"class":94},[88,235,129],{"class":94},[88,237,133],{"class":132},[88,239,240],{"class":98},"()\n",[88,242,243,246,249],{"class":90,"line":142},[88,244,245],{"class":105},"  .",[88,247,248],{"class":132},"prepend",[88,250,251],{"class":98},"(\n",[88,253,254],{"class":90,"line":154},[88,255,257],{"class":256},"sHwdD","    \u002F\u002F flat configs before the main PleaseAI config\n",[88,259,260],{"class":90,"line":172},[88,261,262],{"class":98},"  )\n",[88,264,265,267,270,272,274,277,279,282],{"class":90,"line":178},[88,266,245],{"class":105},[88,268,269],{"class":132},"override",[88,271,136],{"class":98},[88,273,166],{"class":105},[88,275,276],{"class":109},"antfu\u002Fstylistic\u002Frules",[88,278,166],{"class":105},[88,280,281],{"class":105},",",[88,283,151],{"class":105},[88,285,287,290,292],{"class":90,"line":286},8,[88,288,289],{"class":145},"    rules",[88,291,76],{"class":105},[88,293,151],{"class":105},[88,295,297,300,303,305,307,310,312,315,317,319,322,325,327,331,333,336,338,341,344,347],{"class":90,"line":296},9,[88,298,299],{"class":105},"      '",[88,301,302],{"class":145},"style\u002Fgenerator-star-spacing",[88,304,166],{"class":105},[88,306,76],{"class":105},[88,308,309],{"class":98}," [",[88,311,166],{"class":105},[88,313,314],{"class":109},"error",[88,316,166],{"class":105},[88,318,281],{"class":105},[88,320,321],{"class":105}," {",[88,323,324],{"class":145}," after",[88,326,76],{"class":105},[88,328,330],{"class":329},"sfNiH"," true",[88,332,281],{"class":105},[88,334,335],{"class":145}," before",[88,337,76],{"class":105},[88,339,340],{"class":329}," false",[88,342,343],{"class":105}," }",[88,345,346],{"class":98},"]",[88,348,169],{"class":105},[88,350,352],{"class":90,"line":351},10,[88,353,354],{"class":105},"    },\n",[88,356,358,361],{"class":90,"line":357},11,[88,359,360],{"class":105},"  }",[88,362,184],{"class":98},[88,364,366,368,371,373],{"class":90,"line":365},12,[88,367,245],{"class":105},[88,369,370],{"class":132},"renamePlugins",[88,372,136],{"class":98},[88,374,139],{"class":105},[88,376,378,381,384,386,388,390,393,395],{"class":90,"line":377},13,[88,379,380],{"class":105},"    '",[88,382,383],{"class":145},"old-prefix",[88,385,166],{"class":105},[88,387,76],{"class":105},[88,389,106],{"class":105},[88,391,392],{"class":109},"new-prefix",[88,394,166],{"class":105},[88,396,169],{"class":105},[88,398,400,402],{"class":90,"line":399},14,[88,401,360],{"class":105},[88,403,184],{"class":98},[88,405,407,409,412,414,416,419,421],{"class":90,"line":406},15,[88,408,245],{"class":105},[88,410,411],{"class":132},"remove",[88,413,136],{"class":98},[88,415,166],{"class":105},[88,417,418],{"class":109},"antfu\u002Fstylistic",[88,420,166],{"class":105},[88,422,184],{"class":98},[61,424,425],{},"Reach for this API when:",[427,428,429,437,444],"ul",{},[430,431,432,433,436],"li",{},"You want to ",[434,435,411],"strong",{}," a named config block entirely",[430,438,439,440,443],{},"You need to ",[434,441,442],{},"rename"," a plugin prefix without writing a custom config",[430,445,432,446,448,449,452],{},[434,447,269],{}," rules inside a specific named block (more surgical than the top-level ",[73,450,451],{},"overrides",")",[56,454,456,459],{"id":455},"command-codemods",[73,457,458],{},"command"," Codemods",[61,461,462,464,465,472],{},[73,463,110],{}," ships ",[65,466,469],{"href":467,"rel":468},"https:\u002F\u002Fgithub.com\u002Fantfu\u002Feslint-plugin-command",[69],[73,470,471],{},"eslint-plugin-command"," — an on-demand micro-codemod system triggered by triple-slash comments. It's not a typical lint rule; you explicitly opt in per-site.",[61,474,475],{},"Built-in triggers include:",[427,477,478,488,497,509,520],{},[430,479,480,483,484,487],{},[73,481,482],{},"\u002F\u002F\u002F to-function"," — arrow function → ",[73,485,486],{},"function"," declaration",[430,489,490,493,494,496],{},[73,491,492],{},"\u002F\u002F\u002F to-arrow"," — ",[73,495,486],{}," declaration → arrow function",[430,498,499,493,502,505,506],{},[73,500,501],{},"\u002F\u002F\u002F to-for-each",[73,503,504],{},"for"," loop → ",[73,507,508],{},".forEach()",[430,510,511,493,514,516,517],{},[73,512,513],{},"\u002F\u002F\u002F to-for-of",[73,515,508],{}," → ",[73,518,519],{},"for-of",[430,521,522,525],{},[73,523,524],{},"\u002F\u002F\u002F keep-sorted"," — sort the next object\u002Farray\u002Finterface",[61,527,528,529,534],{},"See the ",[65,530,533],{"href":531,"rel":532},"https:\u002F\u002Fgithub.com\u002Fantfu\u002Feslint-plugin-command#built-in-commands",[69],"plugin docs"," for the full catalogue.",[61,536,537],{},"Usage — place the trigger one line above the code:",[78,539,542],{"className":80,"code":540,"filename":541,"language":83,"meta":84,"style":84},"\u002F\u002F\u002F to-function\nconst greet = async (name: string): Promise\u003Cvoid> => {\n  console.log(`Hello, ${name}`)\n}\n","before.ts",[73,543,544,549,597,626],{"__ignoreMap":84},[88,545,546],{"class":90,"line":91},[88,547,548],{"class":256},"\u002F\u002F\u002F to-function\n",[88,550,551,555,558,561,564,567,571,573,577,580,583,586,589,592,595],{"class":90,"line":116},[88,552,554],{"class":553},"spNyl","const",[88,556,557],{"class":98}," greet ",[88,559,560],{"class":105},"=",[88,562,563],{"class":553}," async",[88,565,566],{"class":105}," (",[88,568,570],{"class":569},"sHdIc","name",[88,572,76],{"class":105},[88,574,576],{"class":575},"sBMFI"," string",[88,578,579],{"class":105},"):",[88,581,582],{"class":575}," Promise",[88,584,585],{"class":105},"\u003C",[88,587,588],{"class":575},"void",[88,590,591],{"class":105},">",[88,593,594],{"class":553}," =>",[88,596,151],{"class":105},[88,598,599,602,605,608,610,613,616,619,621,624],{"class":90,"line":123},[88,600,601],{"class":98},"  console",[88,603,604],{"class":105},".",[88,606,607],{"class":132},"log",[88,609,136],{"class":145},[88,611,612],{"class":105},"`",[88,614,615],{"class":109},"Hello, ",[88,617,618],{"class":105},"${",[88,620,570],{"class":98},[88,622,623],{"class":105},"}`",[88,625,184],{"class":145},[88,627,628],{"class":90,"line":142},[88,629,630],{"class":105},"}\n",[61,632,633,634,76],{},"After ",[73,635,636],{},"eslint --fix",[78,638,641],{"className":80,"code":639,"filename":640,"language":83,"meta":84,"style":84},"async function greet(name: string): Promise\u003Cvoid> {\n  console.log(`Hello, ${name}`)\n}\n","after.ts",[73,642,643,674,696],{"__ignoreMap":84},[88,644,645,648,651,654,656,658,660,662,664,666,668,670,672],{"class":90,"line":91},[88,646,647],{"class":553},"async",[88,649,650],{"class":553}," function",[88,652,653],{"class":132}," greet",[88,655,136],{"class":105},[88,657,570],{"class":569},[88,659,76],{"class":105},[88,661,576],{"class":575},[88,663,579],{"class":105},[88,665,582],{"class":575},[88,667,585],{"class":105},[88,669,588],{"class":575},[88,671,591],{"class":105},[88,673,151],{"class":105},[88,675,676,678,680,682,684,686,688,690,692,694],{"class":90,"line":116},[88,677,601],{"class":98},[88,679,604],{"class":105},[88,681,607],{"class":132},[88,683,136],{"class":145},[88,685,612],{"class":105},[88,687,615],{"class":109},[88,689,618],{"class":105},[88,691,570],{"class":98},[88,693,623],{"class":105},[88,695,184],{"class":145},[88,697,698],{"class":90,"line":123},[88,699,630],{"class":105},[61,701,702],{},"The trigger comment is one-off — it's removed along with the transformation.",[56,704,706],{"id":705},"plugins-renaming","Plugins Renaming",[61,708,709,711,712,715],{},[73,710,110],{}," inherits ",[73,713,714],{},"@antfu\u002Feslint-config","'s plugin renaming for a shorter, consistent DX:",[717,718,719,735],"table",{},[720,721,722],"thead",{},[723,724,725,729,732],"tr",{},[726,727,728],"th",{},"New prefix",[726,730,731],{},"Original prefix",[726,733,734],{},"Source plugin",[736,737,738,760,781,802,823,844],"tbody",{},[723,739,740,746,751],{},[741,742,743],"td",{},[73,744,745],{},"import\u002F*",[741,747,748],{},[73,749,750],{},"import-lite\u002F*",[741,752,753],{},[65,754,757],{"href":755,"rel":756},"https:\u002F\u002Fgithub.com\u002F9romise\u002Feslint-plugin-import-lite",[69],[73,758,759],{},"eslint-plugin-import-lite",[723,761,762,767,772],{},[741,763,764],{},[73,765,766],{},"node\u002F*",[741,768,769],{},[73,770,771],{},"n\u002F*",[741,773,774],{},[65,775,778],{"href":776,"rel":777},"https:\u002F\u002Fgithub.com\u002Feslint-community\u002Feslint-plugin-n",[69],[73,779,780],{},"eslint-plugin-n",[723,782,783,788,793],{},[741,784,785],{},[73,786,787],{},"yaml\u002F*",[741,789,790],{},[73,791,792],{},"yml\u002F*",[741,794,795],{},[65,796,799],{"href":797,"rel":798},"https:\u002F\u002Fgithub.com\u002Fota-meshi\u002Feslint-plugin-yml",[69],[73,800,801],{},"eslint-plugin-yml",[723,803,804,809,814],{},[741,805,806],{},[73,807,808],{},"ts\u002F*",[741,810,811],{},[73,812,813],{},"@typescript-eslint\u002F*",[741,815,816],{},[65,817,820],{"href":818,"rel":819},"https:\u002F\u002Fgithub.com\u002Ftypescript-eslint\u002Ftypescript-eslint",[69],[73,821,822],{},"@typescript-eslint\u002Feslint-plugin",[723,824,825,830,835],{},[741,826,827],{},[73,828,829],{},"style\u002F*",[741,831,832],{},[73,833,834],{},"@stylistic\u002F*",[741,836,837],{},[65,838,841],{"href":839,"rel":840},"https:\u002F\u002Fgithub.com\u002Feslint-stylistic\u002Feslint-stylistic",[69],[73,842,843],{},"@stylistic\u002Feslint-plugin",[723,845,846,851,856],{},[741,847,848],{},[73,849,850],{},"test\u002F*",[741,852,853],{},[73,854,855],{},"vitest\u002F*",[741,857,858],{},[65,859,862],{"href":860,"rel":861},"https:\u002F\u002Fgithub.com\u002Fvitest-dev\u002Feslint-plugin-vitest",[69],[73,863,864],{},"@vitest\u002Feslint-plugin",[61,866,867],{},"So when you override a rule, use the new prefix:",[78,869,871],{"className":80,"code":870,"filename":82,"language":83,"meta":84,"style":84},"import pleaseai from '@pleaseai\u002Feslint-config'\n\nexport default pleaseai({\n  rules: {\n    'ts\u002Fconsistent-type-definitions': ['error', 'interface'],\n    'style\u002Fmax-statements-per-line': ['error', { max: 2 }],\n  },\n})\n",[73,872,873,887,891,903,912,944,982,986],{"__ignoreMap":84},[88,874,875,877,879,881,883,885],{"class":90,"line":91},[88,876,95],{"class":94},[88,878,99],{"class":98},[88,880,102],{"class":94},[88,882,106],{"class":105},[88,884,110],{"class":109},[88,886,113],{"class":105},[88,888,889],{"class":90,"line":116},[88,890,120],{"emptyLinePlaceholder":119},[88,892,893,895,897,899,901],{"class":90,"line":123},[88,894,126],{"class":94},[88,896,129],{"class":94},[88,898,133],{"class":132},[88,900,136],{"class":98},[88,902,139],{"class":105},[88,904,905,908,910],{"class":90,"line":142},[88,906,907],{"class":145},"  rules",[88,909,76],{"class":105},[88,911,151],{"class":105},[88,913,914,916,919,921,923,925,927,929,931,933,935,938,940,942],{"class":90,"line":154},[88,915,380],{"class":105},[88,917,918],{"class":145},"ts\u002Fconsistent-type-definitions",[88,920,166],{"class":105},[88,922,76],{"class":105},[88,924,309],{"class":98},[88,926,166],{"class":105},[88,928,314],{"class":109},[88,930,166],{"class":105},[88,932,281],{"class":105},[88,934,106],{"class":105},[88,936,937],{"class":109},"interface",[88,939,166],{"class":105},[88,941,346],{"class":98},[88,943,169],{"class":105},[88,945,946,948,951,953,955,957,959,961,963,965,967,970,972,976,978,980],{"class":90,"line":172},[88,947,380],{"class":105},[88,949,950],{"class":145},"style\u002Fmax-statements-per-line",[88,952,166],{"class":105},[88,954,76],{"class":105},[88,956,309],{"class":98},[88,958,166],{"class":105},[88,960,314],{"class":109},[88,962,166],{"class":105},[88,964,281],{"class":105},[88,966,321],{"class":105},[88,968,969],{"class":145}," max",[88,971,76],{"class":105},[88,973,975],{"class":974},"sbssI"," 2",[88,977,343],{"class":105},[88,979,346],{"class":98},[88,981,169],{"class":105},[88,983,984],{"class":90,"line":178},[88,985,175],{"class":105},[88,987,988,990],{"class":90,"line":286},[88,989,181],{"class":105},[88,991,184],{"class":98},[56,993,995],{"id":994},"view-enabled-rules","View Enabled Rules",[61,997,998,999,1006],{},"Use ",[65,1000,1003],{"href":1001,"rel":1002},"https:\u002F\u002Fgithub.com\u002Feslint\u002Fconfig-inspector",[69],[73,1004,1005],{},"@eslint\u002Fconfig-inspector"," to visualise the fully-resolved config in a browser — every enabled rule, every plugin, every file glob:",[78,1008,1013],{"className":1009,"code":1010,"filename":1011,"language":1012,"meta":84,"style":84},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx @eslint\u002Fconfig-inspector\n","Terminal","bash",[73,1014,1015],{"__ignoreMap":84},[88,1016,1017,1020],{"class":90,"line":91},[88,1018,1019],{"class":575},"npx",[88,1021,1022],{"class":109}," @eslint\u002Fconfig-inspector\n",[61,1024,1025],{},"It opens a local server showing the flat config graph. Indispensable when you're debugging \"why is this rule firing\" or \"which preset added this\".",[56,1027,1029],{"id":1028},"re-exports","Re-exports",[61,1031,1032,1033,1035,1036,1038],{},"Every export from ",[73,1034,714],{}," is re-exported, so you can import fine-grained configs directly when you want to compose them by hand instead of using the ",[73,1037,197],{}," factory:",[78,1040,1042],{"className":80,"code":1041,"filename":82,"language":83,"meta":84,"style":84},"import { combine, javascript, typescript, vue } from '@pleaseai\u002Feslint-config'\n\nexport default combine(\n  javascript(),\n  typescript(),\n  vue(),\n)\n",[73,1043,1044,1079,1083,1093,1103,1111,1120],{"__ignoreMap":84},[88,1045,1046,1048,1050,1053,1055,1058,1060,1063,1065,1068,1070,1073,1075,1077],{"class":90,"line":91},[88,1047,95],{"class":94},[88,1049,321],{"class":105},[88,1051,1052],{"class":98}," combine",[88,1054,281],{"class":105},[88,1056,1057],{"class":98}," javascript",[88,1059,281],{"class":105},[88,1061,1062],{"class":98}," typescript",[88,1064,281],{"class":105},[88,1066,1067],{"class":98}," vue",[88,1069,343],{"class":105},[88,1071,1072],{"class":94}," from",[88,1074,106],{"class":105},[88,1076,110],{"class":109},[88,1078,113],{"class":105},[88,1080,1081],{"class":90,"line":116},[88,1082,120],{"emptyLinePlaceholder":119},[88,1084,1085,1087,1089,1091],{"class":90,"line":123},[88,1086,126],{"class":94},[88,1088,129],{"class":94},[88,1090,1052],{"class":132},[88,1092,251],{"class":98},[88,1094,1095,1098,1101],{"class":90,"line":142},[88,1096,1097],{"class":132},"  javascript",[88,1099,1100],{"class":98},"()",[88,1102,169],{"class":105},[88,1104,1105,1107,1109],{"class":90,"line":154},[88,1106,146],{"class":132},[88,1108,1100],{"class":98},[88,1110,169],{"class":105},[88,1112,1113,1116,1118],{"class":90,"line":172},[88,1114,1115],{"class":132},"  vue",[88,1117,1100],{"class":98},[88,1119,169],{"class":105},[88,1121,1122],{"class":90,"line":178},[88,1123,184],{"class":98},[56,1125,1127],{"id":1126},"versioning-policy","Versioning Policy",[61,1129,1130,1132,1133,1138,1139,604],{},[73,1131,110],{}," follows ",[65,1134,1137],{"href":1135,"rel":1136},"https:\u002F\u002Fsemver.org\u002F",[69],"Semantic Versioning",", but because it's an opinionated style preset with many moving parts, ",[434,1140,1141],{},"rule changes are not treated as breaking changes",[61,1143,1144],{},[434,1145,1146],{},"Breaking (major bump)",[427,1148,1149,1152,1155,1158],{},[430,1150,1151],{},"Node.js version requirement changes",[430,1153,1154],{},"Large refactors that may break downstream configs",[430,1156,1157],{},"Major plugin upgrades that may break existing rules",[430,1159,1160],{},"Changes that likely affect most codebases",[61,1162,1163],{},[434,1164,1165],{},"Non-breaking (minor\u002Fpatch)",[427,1167,1168,1171,1174],{},[430,1169,1170],{},"Enabling or disabling individual rules (even if stricter)",[430,1172,1173],{},"Changing rule options",[430,1175,1176],{},"Dependency version bumps",[61,1178,1179,1180,1185],{},"If a rule tightening breaks your build, pin to the previous minor version and ",[65,1181,1184],{"href":1182,"rel":1183},"https:\u002F\u002Fgithub.com\u002Fpleaseai\u002Fcode-style\u002Fissues",[69],"open an issue"," so we can discuss the trade-off.",[1187,1188,1189],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":84,"searchDepth":116,"depth":116,"links":1191},[1192,1193,1194,1196,1197,1198,1199],{"id":58,"depth":116,"text":59},{"id":191,"depth":116,"text":192},{"id":455,"depth":116,"text":1195},"command Codemods",{"id":705,"depth":116,"text":706},{"id":994,"depth":116,"text":995},{"id":1028,"depth":116,"text":1029},{"id":1126,"depth":116,"text":1127},"Config Composer, type-aware rules, command codemods, plugin renaming, and versioning policy.","md",null,{},{"title":24,"description":1200},"Vx6btkszGjtpNJuzvaGul9pD_63mlV7Tn8Lfn3yZ6bo",[1207,1209],{"title":20,"path":21,"stem":22,"description":1208,"children":-1},"Enable optional framework configs for React, Vue, Next.js, Svelte, Astro, Solid, UnoCSS, and Angular.",{"title":28,"path":29,"stem":30,"description":1210,"children":-1},"VS Code, Neovim, editor-specific disables, and pre-commit hooks via lint-staged.",1776318164216]