[{"data":1,"prerenderedAt":1774},["ShallowReactive",2],{"navigation_docs_ko":3,"-ko-eslint-config":46,"-ko-eslint-config-surround":1771},[4,31,36,41],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"ESLint Config","\u002Fko\u002Feslint-config","ko\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","\u002Fko\u002Feslint-config\u002Fpackage-json","ko\u002F1.eslint-config\u002F2.package-json",{"title":16,"path":17,"stem":18},"Nuxt 통합","\u002Fko\u002Feslint-config\u002Fnuxt","ko\u002F1.eslint-config\u002F3.nuxt",{"title":20,"path":21,"stem":22},"프레임워크 통합","\u002Fko\u002Feslint-config\u002Fframeworks","ko\u002F1.eslint-config\u002F4.frameworks",{"title":24,"path":25,"stem":26},"고급 사용법","\u002Fko\u002Feslint-config\u002Fadvanced","ko\u002F1.eslint-config\u002F5.advanced",{"title":28,"path":29,"stem":30},"에디터 & CI 통합","\u002Fko\u002Feslint-config\u002Feditor","ko\u002F1.eslint-config\u002F6.editor",{"title":32,"path":33,"stem":34,"icon":35},"Prettier Config","\u002Fko\u002Fprettier-config","ko\u002F2.prettier-config","i-lucide-paintbrush",{"title":37,"path":38,"stem":39,"icon":40},"EditorConfig","\u002Fko\u002Feditorconfig","ko\u002F3.editorconfig","i-lucide-file-cog",{"title":42,"path":43,"stem":44,"icon":45},"CLI","\u002Fko\u002Fcli","ko\u002F4.cli","i-lucide-terminal",{"id":47,"title":5,"body":48,"description":1764,"extension":1765,"links":1766,"meta":1767,"navigation":1768,"path":6,"seo":1769,"stem":7,"__hash__":1770},"docs_ko\u002Fko\u002F1.eslint-config\u002F1.index.md",{"type":49,"value":50,"toc":1744},"minimark",[51,55,82,87,142,145,216,232,235,245,297,300,305,312,480,486,490,493,616,620,627,784,795,814,818,825,903,913,917,923,1077,1086,1088,1112,1204,1252,1267,1271,1278,1346,1353,1357,1385,1389,1392,1405,1416,1420,1431,1435,1441,1533,1544,1548,1560,1664,1667,1740],[52,53,5],"h1",{"id":54},"eslint-config",[56,57,58,62,63,72,73,76,77,81],"p",{},[59,60,61],"code",{},"@pleaseai\u002Feslint-config","는 ",[64,65,69],"a",{"href":66,"rel":67},"https:\u002F\u002Fgithub.com\u002Fantfu\u002Feslint-config",[68],"nofollow",[59,70,71],{},"@antfu\u002Feslint-config"," 위에 구축된 의견이 반영된 ESLint flat config입니다. 단일 ",[59,74,75],{},"pleaseai()"," 함수만으로 JS\u002FTS\u002FJSX\u002FVue\u002FJSON\u002FYAML\u002FMarkdown에 대한 린팅 ",[78,79,80],"strong",{},"과 포매팅","을 기본 제공 — Prettier가 필요하지 않습니다.",[83,84,86],"h2",{"id":85},"주요-기능","주요 기능",[88,89,90,99,105,108,115,125,133,139],"ul",{},[91,92,93,98],"li",{},[64,94,97],{"href":95,"rel":96},"https:\u002F\u002Feslint.org\u002Fdocs\u002Flatest\u002Fuse\u002Fconfigure\u002Fconfiguration-files-new",[68],"ESLint flat config"," 형식, 조합 가능하고 미래 지향적",[91,100,101,102],{},"포매팅 자동 수정 — ",[78,103,104],{},"Prettier 없이 독립적으로 사용",[91,106,107],{},"TypeScript, JSX, Vue, JSON, YAML, Markdown, TOML, XML, GraphQL, Svelte, Astro, CSS 지원",[91,109,110,111,114],{},"선택적 ",[64,112,113],{"href":21},"React, Nextjs, Svelte, UnoCSS, Astro, Solid, Angular"," 통합",[91,116,117,120,121],{},[59,118,119],{},"eslint-plugin-format","을 통한 CSS \u002F HTML \u002F Markdown의 선택적 ",[64,122,124],{"href":123},"#%ED%8F%AC%EB%A7%A4%ED%84%B0","포매터",[91,126,127,132],{},[64,128,129],{"href":13},[59,130,131],{},"eslint-plugin-package-json"," 설정 포함",[91,134,135,138],{},[59,136,137],{},".gitignore"," 패턴 자동 감지",[91,140,141],{},"ESLint v9.10.0 이상 필요",[83,143,144],{"id":144},"설치",[146,147,148,179,197],"code-group",{},[149,150,156],"pre",{"className":151,"code":152,"filename":153,"language":154,"meta":155,"style":155},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add -D @pleaseai\u002Feslint-config eslint\n","bun","bash","",[59,157,158],{"__ignoreMap":155},[159,160,163,166,170,173,176],"span",{"class":161,"line":162},"line",1,[159,164,153],{"class":165},"sBMFI",[159,167,169],{"class":168},"sfazB"," add",[159,171,172],{"class":168}," -D",[159,174,175],{"class":168}," @pleaseai\u002Feslint-config",[159,177,178],{"class":168}," eslint\n",[149,180,183],{"className":151,"code":181,"filename":182,"language":154,"meta":155,"style":155},"pnpm add -D @pleaseai\u002Feslint-config eslint\n","pnpm",[59,184,185],{"__ignoreMap":155},[159,186,187,189,191,193,195],{"class":161,"line":162},[159,188,182],{"class":165},[159,190,169],{"class":168},[159,192,172],{"class":168},[159,194,175],{"class":168},[159,196,178],{"class":168},[149,198,201],{"className":151,"code":199,"filename":200,"language":154,"meta":155,"style":155},"npm install -D @pleaseai\u002Feslint-config eslint\n","npm",[59,202,203],{"__ignoreMap":155},[159,204,205,207,210,212,214],{"class":161,"line":162},[159,206,200],{"class":165},[159,208,209],{"class":168}," install",[159,211,172],{"class":168},[159,213,175],{"class":168},[159,215,178],{"class":168},[217,218,219,220,223,224,227,228,231],"tip",{"to":43},"직접 설정하고 싶지 않다면? ",[59,221,222],{},"bunx @pleaseai\u002Fcode-style","을 실행하세요 — CLI가 패키지를 설치하고 ",[59,225,226],{},"eslint.config.mjs","를 작성해 주며, AI 코딩 어시스턴트를 위한 ",[59,229,230],{},"AGENTS.md"," 규칙 블록도 관리할 수 있습니다.",[83,233,234],{"id":234},"사용법",[56,236,237,238,241,242,244],{},"프로젝트 루트에 ",[59,239,240],{},"eslint.config.ts"," (또는 ",[59,243,226],{},")를 생성하세요:",[149,246,250],{"className":247,"code":248,"filename":240,"language":249,"meta":155,"style":155},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import pleaseai from '@pleaseai\u002Feslint-config'\n\nexport default pleaseai()\n","ts",[59,251,252,274,281],{"__ignoreMap":155},[159,253,254,258,262,265,269,271],{"class":161,"line":162},[159,255,257],{"class":256},"s7zQu","import",[159,259,261],{"class":260},"sTEyZ"," pleaseai ",[159,263,264],{"class":256},"from",[159,266,268],{"class":267},"sMK4o"," '",[159,270,61],{"class":168},[159,272,273],{"class":267},"'\n",[159,275,277],{"class":161,"line":276},2,[159,278,280],{"emptyLinePlaceholder":279},true,"\n",[159,282,284,287,290,294],{"class":161,"line":283},3,[159,285,286],{"class":256},"export",[159,288,289],{"class":256}," default",[159,291,293],{"class":292},"s2Zo4"," pleaseai",[159,295,296],{"class":260},"()\n",[56,298,299],{},"이게 전부입니다. ESLint가 다음 실행 시 자동으로 인식합니다.",[301,302,304],"h3",{"id":303},"옵션과-함께","옵션과 함께",[56,306,307,62,309,311],{},[59,308,75],{},[59,310,71],{},"와 동일한 옵션을 받습니다:",[149,313,315],{"className":247,"code":314,"filename":240,"language":249,"meta":155,"style":155},"import pleaseai from '@pleaseai\u002Feslint-config'\n\nexport default pleaseai({\n  \u002F\u002F PleaseAI 기본값 오버라이드\n  stylistic: {\n    indent: 4,\n  },\n\n  \u002F\u002F 프레임워크 지원 활성화\n  vue: true,\n  react: true,\n\n  \u002F\u002F ignore 추가\n  ignores: [\n    '**\u002Ffixtures',\n  ],\n})\n",[59,316,317,331,335,349,356,369,384,390,395,401,415,427,432,438,449,463,471],{"__ignoreMap":155},[159,318,319,321,323,325,327,329],{"class":161,"line":162},[159,320,257],{"class":256},[159,322,261],{"class":260},[159,324,264],{"class":256},[159,326,268],{"class":267},[159,328,61],{"class":168},[159,330,273],{"class":267},[159,332,333],{"class":161,"line":276},[159,334,280],{"emptyLinePlaceholder":279},[159,336,337,339,341,343,346],{"class":161,"line":283},[159,338,286],{"class":256},[159,340,289],{"class":256},[159,342,293],{"class":292},[159,344,345],{"class":260},"(",[159,347,348],{"class":267},"{\n",[159,350,352],{"class":161,"line":351},4,[159,353,355],{"class":354},"sHwdD","  \u002F\u002F PleaseAI 기본값 오버라이드\n",[159,357,359,363,366],{"class":161,"line":358},5,[159,360,362],{"class":361},"swJcz","  stylistic",[159,364,365],{"class":267},":",[159,367,368],{"class":267}," {\n",[159,370,372,375,377,381],{"class":161,"line":371},6,[159,373,374],{"class":361},"    indent",[159,376,365],{"class":267},[159,378,380],{"class":379},"sbssI"," 4",[159,382,383],{"class":267},",\n",[159,385,387],{"class":161,"line":386},7,[159,388,389],{"class":267},"  },\n",[159,391,393],{"class":161,"line":392},8,[159,394,280],{"emptyLinePlaceholder":279},[159,396,398],{"class":161,"line":397},9,[159,399,400],{"class":354},"  \u002F\u002F 프레임워크 지원 활성화\n",[159,402,404,407,409,413],{"class":161,"line":403},10,[159,405,406],{"class":361},"  vue",[159,408,365],{"class":267},[159,410,412],{"class":411},"sfNiH"," true",[159,414,383],{"class":267},[159,416,418,421,423,425],{"class":161,"line":417},11,[159,419,420],{"class":361},"  react",[159,422,365],{"class":267},[159,424,412],{"class":411},[159,426,383],{"class":267},[159,428,430],{"class":161,"line":429},12,[159,431,280],{"emptyLinePlaceholder":279},[159,433,435],{"class":161,"line":434},13,[159,436,437],{"class":354},"  \u002F\u002F ignore 추가\n",[159,439,441,444,446],{"class":161,"line":440},14,[159,442,443],{"class":361},"  ignores",[159,445,365],{"class":267},[159,447,448],{"class":260}," [\n",[159,450,452,455,458,461],{"class":161,"line":451},15,[159,453,454],{"class":267},"    '",[159,456,457],{"class":168},"**\u002Ffixtures",[159,459,460],{"class":267},"'",[159,462,383],{"class":267},[159,464,466,469],{"class":161,"line":465},16,[159,467,468],{"class":260},"  ]",[159,470,383],{"class":267},[159,472,474,477],{"class":161,"line":473},17,[159,475,476],{"class":267},"}",[159,478,479],{"class":260},")\n",[56,481,482,483,485],{},"프레임워크 플래그와 peer dependency 전체 목록은 ",[64,484,20],{"href":21},"에서 확인하세요.",[301,487,489],{"id":488},"추가-설정과-함께","추가 설정과 함께",[56,491,492],{},"추가 flat config 항목을 나머지 인자로 전달할 수 있습니다 — PleaseAI 프리셋 뒤에 병합됩니다:",[149,494,496],{"className":247,"code":495,"filename":240,"language":249,"meta":155,"style":155},"import pleaseai from '@pleaseai\u002Feslint-config'\n\nexport default pleaseai(\n  {\n    typescript: true,\n  },\n  {\n    files: ['**\u002F*.ts'],\n    rules: {\n      'no-console': 'warn',\n    },\n  },\n)\n",[59,497,498,512,516,527,532,543,547,551,573,582,603,608,612],{"__ignoreMap":155},[159,499,500,502,504,506,508,510],{"class":161,"line":162},[159,501,257],{"class":256},[159,503,261],{"class":260},[159,505,264],{"class":256},[159,507,268],{"class":267},[159,509,61],{"class":168},[159,511,273],{"class":267},[159,513,514],{"class":161,"line":276},[159,515,280],{"emptyLinePlaceholder":279},[159,517,518,520,522,524],{"class":161,"line":283},[159,519,286],{"class":256},[159,521,289],{"class":256},[159,523,293],{"class":292},[159,525,526],{"class":260},"(\n",[159,528,529],{"class":161,"line":351},[159,530,531],{"class":267},"  {\n",[159,533,534,537,539,541],{"class":161,"line":358},[159,535,536],{"class":361},"    typescript",[159,538,365],{"class":267},[159,540,412],{"class":411},[159,542,383],{"class":267},[159,544,545],{"class":161,"line":371},[159,546,389],{"class":267},[159,548,549],{"class":161,"line":386},[159,550,531],{"class":267},[159,552,553,556,558,561,563,566,568,571],{"class":161,"line":392},[159,554,555],{"class":361},"    files",[159,557,365],{"class":267},[159,559,560],{"class":260}," [",[159,562,460],{"class":267},[159,564,565],{"class":168},"**\u002F*.ts",[159,567,460],{"class":267},[159,569,570],{"class":260},"]",[159,572,383],{"class":267},[159,574,575,578,580],{"class":161,"line":397},[159,576,577],{"class":361},"    rules",[159,579,365],{"class":267},[159,581,368],{"class":267},[159,583,584,587,590,592,594,596,599,601],{"class":161,"line":403},[159,585,586],{"class":267},"      '",[159,588,589],{"class":361},"no-console",[159,591,460],{"class":267},[159,593,365],{"class":267},[159,595,268],{"class":267},[159,597,598],{"class":168},"warn",[159,600,460],{"class":267},[159,602,383],{"class":267},[159,604,605],{"class":161,"line":417},[159,606,607],{"class":267},"    },\n",[159,609,610],{"class":161,"line":429},[159,611,389],{"class":267},[159,613,614],{"class":161,"line":434},[159,615,479],{"class":260},[301,617,619],{"id":618},"규칙-오버라이드","규칙 오버라이드",[56,621,622,623,626],{},"모든 프레임워크 통합은 ",[59,624,625],{},"overrides"," 객체를 받기 때문에, 전체 프리셋을 교체하지 않고도 규칙을 조정할 수 있습니다:",[149,628,630],{"className":247,"code":629,"filename":240,"language":249,"meta":155,"style":155},"import pleaseai from '@pleaseai\u002Feslint-config'\n\nexport default pleaseai({\n  vue: {\n    overrides: {\n      'vue\u002Foperator-linebreak': ['error', 'before'],\n    },\n  },\n  typescript: {\n    overrides: {\n      'ts\u002Fconsistent-type-definitions': ['error', 'interface'],\n    },\n  },\n})\n",[59,631,632,646,650,662,670,679,713,717,721,730,738,770,774,778],{"__ignoreMap":155},[159,633,634,636,638,640,642,644],{"class":161,"line":162},[159,635,257],{"class":256},[159,637,261],{"class":260},[159,639,264],{"class":256},[159,641,268],{"class":267},[159,643,61],{"class":168},[159,645,273],{"class":267},[159,647,648],{"class":161,"line":276},[159,649,280],{"emptyLinePlaceholder":279},[159,651,652,654,656,658,660],{"class":161,"line":283},[159,653,286],{"class":256},[159,655,289],{"class":256},[159,657,293],{"class":292},[159,659,345],{"class":260},[159,661,348],{"class":267},[159,663,664,666,668],{"class":161,"line":351},[159,665,406],{"class":361},[159,667,365],{"class":267},[159,669,368],{"class":267},[159,671,672,675,677],{"class":161,"line":358},[159,673,674],{"class":361},"    overrides",[159,676,365],{"class":267},[159,678,368],{"class":267},[159,680,681,683,686,688,690,692,694,697,699,702,704,707,709,711],{"class":161,"line":371},[159,682,586],{"class":267},[159,684,685],{"class":361},"vue\u002Foperator-linebreak",[159,687,460],{"class":267},[159,689,365],{"class":267},[159,691,560],{"class":260},[159,693,460],{"class":267},[159,695,696],{"class":168},"error",[159,698,460],{"class":267},[159,700,701],{"class":267},",",[159,703,268],{"class":267},[159,705,706],{"class":168},"before",[159,708,460],{"class":267},[159,710,570],{"class":260},[159,712,383],{"class":267},[159,714,715],{"class":161,"line":386},[159,716,607],{"class":267},[159,718,719],{"class":161,"line":392},[159,720,389],{"class":267},[159,722,723,726,728],{"class":161,"line":397},[159,724,725],{"class":361},"  typescript",[159,727,365],{"class":267},[159,729,368],{"class":267},[159,731,732,734,736],{"class":161,"line":403},[159,733,674],{"class":361},[159,735,365],{"class":267},[159,737,368],{"class":267},[159,739,740,742,745,747,749,751,753,755,757,759,761,764,766,768],{"class":161,"line":417},[159,741,586],{"class":267},[159,743,744],{"class":361},"ts\u002Fconsistent-type-definitions",[159,746,460],{"class":267},[159,748,365],{"class":267},[159,750,560],{"class":260},[159,752,460],{"class":267},[159,754,696],{"class":168},[159,756,460],{"class":267},[159,758,701],{"class":267},[159,760,268],{"class":267},[159,762,763],{"class":168},"interface",[159,765,460],{"class":267},[159,767,570],{"class":260},[159,769,383],{"class":267},[159,771,772],{"class":161,"line":429},[159,773,607],{"class":267},[159,775,776],{"class":161,"line":434},[159,777,389],{"class":267},[159,779,780,782],{"class":161,"line":440},[159,781,476],{"class":267},[159,783,479],{"class":260},[56,785,786,787,790,791,794],{},"특정 통합에 속하지 않는 오버라이드는 ",[64,788,489],{"href":789},"#%EC%B6%94%EA%B0%80-%EC%84%A4%EC%A0%95%EA%B3%BC-%ED%95%A8%EA%BB%98","에서 보여준 것처럼 두 번째 인자로 ",[59,792,793],{},"rules"," 객체를 전달하세요.",[796,797,799,800,803,804,803,807,803,810,813],"note",{"to":798},"\u002Fko\u002Feslint-config\u002Fadvanced#플러그인-이름-변경","플러그인 prefix는 편의를 위해 이름이 변경되어 있습니다 — ",[59,801,802],{},"ts\u002F*",", ",[59,805,806],{},"style\u002F*",[59,808,809],{},"test\u002F*",[59,811,812],{},"import\u002F*"," 등을 사용하세요. 전체 매핑은 고급 사용법에서 확인할 수 있습니다.",[83,815,817],{"id":816},"npm-스크립트","NPM 스크립트",[56,819,820,821,824],{},"린트 명령을 ",[59,822,823],{},"package.json","에 추가하세요:",[149,826,830],{"className":827,"code":828,"filename":823,"language":829,"meta":155,"style":155},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"scripts\": {\n    \"lint\": \"eslint .\",\n    \"lint:fix\": \"eslint . --fix\"\n  }\n}\n","json",[59,831,832,836,852,874,893,898],{"__ignoreMap":155},[159,833,834],{"class":161,"line":162},[159,835,348],{"class":267},[159,837,838,841,845,848,850],{"class":161,"line":276},[159,839,840],{"class":267},"  \"",[159,842,844],{"class":843},"spNyl","scripts",[159,846,847],{"class":267},"\"",[159,849,365],{"class":267},[159,851,368],{"class":267},[159,853,854,857,860,862,864,867,870,872],{"class":161,"line":283},[159,855,856],{"class":267},"    \"",[159,858,859],{"class":165},"lint",[159,861,847],{"class":267},[159,863,365],{"class":267},[159,865,866],{"class":267}," \"",[159,868,869],{"class":168},"eslint .",[159,871,847],{"class":267},[159,873,383],{"class":267},[159,875,876,878,881,883,885,887,890],{"class":161,"line":351},[159,877,856],{"class":267},[159,879,880],{"class":165},"lint:fix",[159,882,847],{"class":267},[159,884,365],{"class":267},[159,886,866],{"class":267},[159,888,889],{"class":168},"eslint . --fix",[159,891,892],{"class":267},"\"\n",[159,894,895],{"class":161,"line":358},[159,896,897],{"class":267},"  }\n",[159,899,900],{"class":161,"line":371},[159,901,902],{"class":267},"}\n",[56,904,905,908,909,912],{},[59,906,907],{},"npm run lint","로 검사하거나 ",[59,910,911],{},"npm run lint:fix","로 자동 수정할 수 있습니다.",[83,914,916],{"id":915},"pleaseai-기본값","PleaseAI 기본값",[56,918,919,920,922],{},"이 설정은 ",[59,921,71],{},"를 다음 PleaseAI 전용 기본값으로 감쌉니다:",[924,925,926,942],"table",{},[927,928,929],"thead",{},[930,931,932,936,939],"tr",{},[933,934,935],"th",{},"옵션",[933,937,938],{},"값",[933,940,941],{},"설명",[943,944,945,961,976,991,1006,1022,1047,1064],"tbody",{},[930,946,947,953,958],{},[948,949,950],"td",{},[59,951,952],{},"stylistic.indent",[948,954,955],{},[59,956,957],{},"2",[948,959,960],{},"공백 2칸 들여쓰기",[930,962,963,968,973],{},[948,964,965],{},[59,966,967],{},"stylistic.quotes",[948,969,970],{},[59,971,972],{},"single",[948,974,975],{},"홑따옴표",[930,977,978,983,988],{},[948,979,980],{},[59,981,982],{},"stylistic.semi",[948,984,985],{},[59,986,987],{},"false",[948,989,990],{},"세미콜론 없음",[930,992,993,998,1003],{},[948,994,995],{},[59,996,997],{},"typescript",[948,999,1000],{},[59,1001,1002],{},"true",[948,1004,1005],{},"기본 활성화",[930,1007,1008,1013,1017],{},[948,1009,1010],{},[59,1011,1012],{},"gitignore",[948,1014,1015],{},[59,1016,1002],{},[948,1018,1019,1021],{},[59,1020,137],{},"의 모든 항목 무시",[930,1023,1024,1029,1033],{},[948,1025,1026],{},[59,1027,1028],{},"lessOpinionated",[948,1030,1031],{},[59,1032,1002],{},[948,1034,1035,1038,1039,1042,1043,1046],{},[59,1036,1037],{},"antfu\u002Fif-newline","과 ",[59,1040,1041],{},"antfu\u002Fcurly","를 비활성화하고 ",[59,1044,1045],{},"curly: ['error', 'all']","을 활성화",[930,1048,1049,1054,1057],{},[948,1050,1051],{},[59,1052,1053],{},"antfu\u002Ftop-level-function",[948,1055,1056],{},"재활성화",[948,1058,1059,1060,1063],{},"최상위 레벨에서는 ",[59,1061,1062],{},"function"," 선언 선호",[930,1065,1066,1071,1074],{},[948,1067,1068],{},[59,1069,1070],{},"test\u002Fprefer-lowercase-title",[948,1072,1073],{},"비활성화",[948,1075,1076],{},"테스트 제목은 어떤 대소문자로도 시작 가능",[56,1078,1079,1082,1083,1085],{},[59,1080,1081],{},"lessOpinionated: true"," + ",[59,1084,1045],{}," 조합이 antfu 기본값과의 핵심 차이입니다: 제어문 본문은 항상 중괄호를 사용해야 하지만, antfu의 최상위 함수 선호는 그대로 유지됩니다.",[83,1087,124],{"id":124},[56,1089,1090,1091,803,1094,803,1097,1100,1101,1104,1105,1111],{},"ESLint는 ",[59,1092,1093],{},".css",[59,1095,1096],{},".html",[59,1098,1099],{},".xml",", Markdown frontmatter를 기본으로 포매팅하지 못합니다. ",[59,1102,1103],{},"formatters"," 기능을 opt-in하면 ",[64,1106,1109],{"href":1107,"rel":1108},"https:\u002F\u002Fgithub.com\u002Fantfu\u002Feslint-plugin-format",[68],[59,1110,119],{},"(Prettier \u002F dprint를 감쌈)에 위 파일들을 위임하고, 나머지는 순수 ESLint에 맡길 수 있습니다:",[149,1113,1115],{"className":247,"code":1114,"filename":240,"language":249,"meta":155,"style":155},"import pleaseai from '@pleaseai\u002Feslint-config'\n\nexport default pleaseai({\n  formatters: {\n    css: true,\n    html: true,\n    markdown: 'prettier',\n  },\n})\n",[59,1116,1117,1131,1135,1147,1156,1167,1178,1194,1198],{"__ignoreMap":155},[159,1118,1119,1121,1123,1125,1127,1129],{"class":161,"line":162},[159,1120,257],{"class":256},[159,1122,261],{"class":260},[159,1124,264],{"class":256},[159,1126,268],{"class":267},[159,1128,61],{"class":168},[159,1130,273],{"class":267},[159,1132,1133],{"class":161,"line":276},[159,1134,280],{"emptyLinePlaceholder":279},[159,1136,1137,1139,1141,1143,1145],{"class":161,"line":283},[159,1138,286],{"class":256},[159,1140,289],{"class":256},[159,1142,293],{"class":292},[159,1144,345],{"class":260},[159,1146,348],{"class":267},[159,1148,1149,1152,1154],{"class":161,"line":351},[159,1150,1151],{"class":361},"  formatters",[159,1153,365],{"class":267},[159,1155,368],{"class":267},[159,1157,1158,1161,1163,1165],{"class":161,"line":358},[159,1159,1160],{"class":361},"    css",[159,1162,365],{"class":267},[159,1164,412],{"class":411},[159,1166,383],{"class":267},[159,1168,1169,1172,1174,1176],{"class":161,"line":371},[159,1170,1171],{"class":361},"    html",[159,1173,365],{"class":267},[159,1175,412],{"class":411},[159,1177,383],{"class":267},[159,1179,1180,1183,1185,1187,1190,1192],{"class":161,"line":386},[159,1181,1182],{"class":361},"    markdown",[159,1184,365],{"class":267},[159,1186,268],{"class":267},[159,1188,1189],{"class":168},"prettier",[159,1191,460],{"class":267},[159,1193,383],{"class":267},[159,1195,1196],{"class":161,"line":392},[159,1197,389],{"class":267},[159,1199,1200,1202],{"class":161,"line":397},[159,1201,476],{"class":267},[159,1203,479],{"class":260},[146,1205,1206,1222,1237],{},[149,1207,1209],{"className":151,"code":1208,"filename":153,"language":154,"meta":155,"style":155},"bun add -D eslint-plugin-format\n",[59,1210,1211],{"__ignoreMap":155},[159,1212,1213,1215,1217,1219],{"class":161,"line":162},[159,1214,153],{"class":165},[159,1216,169],{"class":168},[159,1218,172],{"class":168},[159,1220,1221],{"class":168}," eslint-plugin-format\n",[149,1223,1225],{"className":151,"code":1224,"filename":182,"language":154,"meta":155,"style":155},"pnpm add -D eslint-plugin-format\n",[59,1226,1227],{"__ignoreMap":155},[159,1228,1229,1231,1233,1235],{"class":161,"line":162},[159,1230,182],{"class":165},[159,1232,169],{"class":168},[159,1234,172],{"class":168},[159,1236,1221],{"class":168},[149,1238,1240],{"className":151,"code":1239,"filename":200,"language":154,"meta":155,"style":155},"npm install -D eslint-plugin-format\n",[59,1241,1242],{"__ignoreMap":155},[159,1243,1244,1246,1248,1250],{"class":161,"line":162},[159,1245,200],{"class":165},[159,1247,209],{"class":168},[159,1249,172],{"class":168},[159,1251,1221],{"class":168},[796,1253,1254,1256,1257,1260,1261,1266],{},[59,1255,1103],{},"는 포매팅만 처리하며 린트는 하지 않습니다. 제대로 된 CSS ",[78,1258,1259],{},"린트","가 필요하다면 ",[64,1262,1265],{"href":1263,"rel":1264},"https:\u002F\u002Fstylelint.io\u002F",[68],"Stylelint","를 함께 사용하세요.",[83,1268,1270],{"id":1269},"타입-인지-규칙","타입 인지 규칙",[56,1272,1273,1274,1277],{},"가장 강력한 TypeScript 규칙은 타입 정보가 필요합니다. ",[59,1275,1276],{},"tsconfig.json","을 가리켜 opt-in 하세요:",[149,1279,1281],{"className":247,"code":1280,"filename":240,"language":249,"meta":155,"style":155},"import pleaseai from '@pleaseai\u002Feslint-config'\n\nexport default pleaseai({\n  typescript: {\n    tsconfigPath: 'tsconfig.json',\n  },\n})\n",[59,1282,1283,1297,1301,1313,1321,1336,1340],{"__ignoreMap":155},[159,1284,1285,1287,1289,1291,1293,1295],{"class":161,"line":162},[159,1286,257],{"class":256},[159,1288,261],{"class":260},[159,1290,264],{"class":256},[159,1292,268],{"class":267},[159,1294,61],{"class":168},[159,1296,273],{"class":267},[159,1298,1299],{"class":161,"line":276},[159,1300,280],{"emptyLinePlaceholder":279},[159,1302,1303,1305,1307,1309,1311],{"class":161,"line":283},[159,1304,286],{"class":256},[159,1306,289],{"class":256},[159,1308,293],{"class":292},[159,1310,345],{"class":260},[159,1312,348],{"class":267},[159,1314,1315,1317,1319],{"class":161,"line":351},[159,1316,725],{"class":361},[159,1318,365],{"class":267},[159,1320,368],{"class":267},[159,1322,1323,1326,1328,1330,1332,1334],{"class":161,"line":358},[159,1324,1325],{"class":361},"    tsconfigPath",[159,1327,365],{"class":267},[159,1329,268],{"class":267},[159,1331,1276],{"class":168},[159,1333,460],{"class":267},[159,1335,383],{"class":267},[159,1337,1338],{"class":161,"line":371},[159,1339,389],{"class":267},[159,1341,1342,1344],{"class":161,"line":386},[159,1343,476],{"class":267},[159,1345,479],{"class":260},[56,1347,1348,1349,485],{},"자세한 내용은 ",[64,1350,1352],{"href":1351},"\u002Fko\u002Feslint-config\u002Fadvanced#%ED%83%80%EC%9E%85-%EC%9D%B8%EC%A7%80-%EA%B7%9C%EC%B9%99","고급 사용법 → 타입 인지 규칙",[83,1354,1356],{"id":1355},"다음-단계","다음 단계",[1358,1359,1360,1365,1373,1378],"card-group",{},[1361,1362,1364],"card",{"icon":1363,"title":20,"to":21},"i-lucide-package","React, Nextjs, Vue, Svelte, Astro, Solid, UnoCSS, Angular — peer dependency 포함.",[1361,1366,1368,1369,1372],{"icon":1367,"title":24,"to":25},"i-lucide-settings-2","Config Composer, ",[59,1370,1371],{},"command"," codemod, 플러그인 이름 변경, 버전 정책.",[1361,1374,1377],{"icon":1375,"title":1376,"to":29},"i-lucide-monitor","에디터 & CI","VS Code, Neovim, 에디터 전용 비활성화, lint-staged.",[1361,1379,1381,1384],{"icon":1380,"title":16,"to":17},"i-lucide-mountain",[59,1382,1383],{},"@nuxt\u002Feslint","과 조합하여 auto-import 인지 린트 사용.",[83,1386,1388],{"id":1387},"faq","FAQ",[301,1390,1391],{"id":1189},"Prettier?",[56,1393,1394,1395,1398,1399,1404],{},"이 설정은 린트 ",[78,1396,1397],{},"와"," 포매팅 모두에 ESLint를 사용하므로 Prettier가 필요하지 않습니다. 이유는 Anthony Fu의 ",[64,1400,1403],{"href":1401,"rel":1402},"https:\u002F\u002Fantfu.me\u002Fposts\u002Fwhy-not-prettier",[68],"Why I don't use Prettier","를 참고하세요.",[56,1406,1407,1408,803,1410,1412,1413,1415],{},"ESLint가 아직 처리하지 못하는 파일(",[59,1409,1093],{},[59,1411,1096],{}," 등)을 포매팅해야 한다면 ",[64,1414,124],{"href":123}," 옵션을 사용하세요 — 내부적으로 Prettier\u002Fdprint를 감싸므로 별도의 도구를 워크플로우에 추가할 필요가 없습니다.",[301,1417,1419],{"id":1418},"css를-어떻게-포매팅하나요","CSS를 어떻게 포매팅하나요?",[56,1421,1422,1426,1427,1430],{},[64,1423,1424],{"href":123},[59,1425,1103],{}," 기능을 opt-in 하세요. 포매팅만 수행하며 린트는 하지 않습니다 — 제대로 된 CSS 린트를 원한다면 ",[64,1428,1265],{"href":1263,"rel":1429},[68],"와 함께 사용하세요.",[301,1432,1434],{"id":1433},"중괄호-스타일","중괄호 스타일?",[56,1436,1437,1438,1440],{},"PleaseAI는 ",[59,1439,1045],{},"을 강제합니다 — 제어문 본문은 항상 중괄호로 감싸야 합니다:",[149,1442,1444],{"className":247,"code":1443,"language":249,"meta":155,"style":155},"\u002F\u002F ✓ 필수\nfunction example() {\n  if (foo) {\n    return true\n  }\n}\n\n\u002F\u002F ✗ 거부됨\nfunction example() {\n  if (foo) return true\n}\n",[59,1445,1446,1451,1463,1479,1487,1491,1495,1499,1504,1514,1529],{"__ignoreMap":155},[159,1447,1448],{"class":161,"line":162},[159,1449,1450],{"class":354},"\u002F\u002F ✓ 필수\n",[159,1452,1453,1455,1458,1461],{"class":161,"line":276},[159,1454,1062],{"class":843},[159,1456,1457],{"class":292}," example",[159,1459,1460],{"class":267},"()",[159,1462,368],{"class":267},[159,1464,1465,1468,1471,1474,1477],{"class":161,"line":283},[159,1466,1467],{"class":256},"  if",[159,1469,1470],{"class":361}," (",[159,1472,1473],{"class":260},"foo",[159,1475,1476],{"class":361},") ",[159,1478,348],{"class":267},[159,1480,1481,1484],{"class":161,"line":351},[159,1482,1483],{"class":256},"    return",[159,1485,1486],{"class":411}," true\n",[159,1488,1489],{"class":161,"line":358},[159,1490,897],{"class":267},[159,1492,1493],{"class":161,"line":371},[159,1494,902],{"class":267},[159,1496,1497],{"class":161,"line":386},[159,1498,280],{"emptyLinePlaceholder":279},[159,1500,1501],{"class":161,"line":392},[159,1502,1503],{"class":354},"\u002F\u002F ✗ 거부됨\n",[159,1505,1506,1508,1510,1512],{"class":161,"line":397},[159,1507,1062],{"class":843},[159,1509,1457],{"class":292},[159,1511,1460],{"class":267},[159,1513,368],{"class":267},[159,1515,1516,1518,1520,1522,1524,1527],{"class":161,"line":403},[159,1517,1467],{"class":256},[159,1519,1470],{"class":361},[159,1521,1473],{"class":260},[159,1523,1476],{"class":361},[159,1525,1526],{"class":256},"return",[159,1528,1486],{"class":411},[159,1530,1531],{"class":161,"line":417},[159,1532,902],{"class":267},[56,1534,1535,1536,1539,1540,1543],{},"이는 중괄호 없는 한 줄짜리 ",[59,1537,1538],{},"if","를 허용하는 antfu 기본값과 다릅니다. 우리가 이 선택을 한 이유는 중괄호 없는 본문이 ",[59,1541,1542],{},"style\u002Fmax-statements-per-line","과 같은 다른 규칙과 상호작용할 때 읽기 어려운 한 줄짜리 코드가 되기 쉽기 때문입니다.",[301,1545,1547],{"id":1546},"최상위-함수-스타일","최상위 함수 스타일?",[56,1549,1437,1550,1552,1553,1556,1557,1559],{},[59,1551,1053],{},"을 재활성화하므로, 최상위 함수는 ",[59,1554,1555],{},"const","에 할당된 arrow function이 아닌 ",[59,1558,1062],{}," 선언을 사용해야 합니다:",[149,1561,1563],{"className":247,"code":1562,"language":249,"meta":155,"style":155},"\u002F\u002F ✓ 권장\nexport function greet(name: string) {\n  return `Hello, ${name}`\n}\n\n\u002F\u002F ✗ 경고\nexport const greet = (name: string) => `Hello, ${name}`\n",[59,1564,1565,1570,1596,1615,1619,1623,1628],{"__ignoreMap":155},[159,1566,1567],{"class":161,"line":162},[159,1568,1569],{"class":354},"\u002F\u002F ✓ 권장\n",[159,1571,1572,1574,1577,1580,1582,1586,1588,1591,1594],{"class":161,"line":276},[159,1573,286],{"class":256},[159,1575,1576],{"class":843}," function",[159,1578,1579],{"class":292}," greet",[159,1581,345],{"class":267},[159,1583,1585],{"class":1584},"sHdIc","name",[159,1587,365],{"class":267},[159,1589,1590],{"class":165}," string",[159,1592,1593],{"class":267},")",[159,1595,368],{"class":267},[159,1597,1598,1601,1604,1607,1610,1612],{"class":161,"line":283},[159,1599,1600],{"class":256},"  return",[159,1602,1603],{"class":267}," `",[159,1605,1606],{"class":168},"Hello, ",[159,1608,1609],{"class":267},"${",[159,1611,1585],{"class":260},[159,1613,1614],{"class":267},"}`\n",[159,1616,1617],{"class":161,"line":351},[159,1618,902],{"class":267},[159,1620,1621],{"class":161,"line":358},[159,1622,280],{"emptyLinePlaceholder":279},[159,1624,1625],{"class":161,"line":371},[159,1626,1627],{"class":354},"\u002F\u002F ✗ 경고\n",[159,1629,1630,1632,1635,1638,1641,1643,1645,1647,1649,1651,1654,1656,1658,1660,1662],{"class":161,"line":386},[159,1631,286],{"class":256},[159,1633,1634],{"class":843}," const",[159,1636,1637],{"class":260}," greet ",[159,1639,1640],{"class":267},"=",[159,1642,1470],{"class":267},[159,1644,1585],{"class":1584},[159,1646,365],{"class":267},[159,1648,1590],{"class":165},[159,1650,1593],{"class":267},[159,1652,1653],{"class":843}," =>",[159,1655,1603],{"class":267},[159,1657,1606],{"class":168},[159,1659,1609],{"class":267},[159,1661,1585],{"class":260},[159,1663,1614],{"class":267},[56,1665,1666],{},"함수 본문 내부, 콜백, 인라인 JSX 핸들러의 arrow function은 여전히 문제없습니다 — 이 규칙은 최상위 선언만 대상으로 합니다. 동의하지 않는다면 오버라이드하세요:",[149,1668,1670],{"className":247,"code":1669,"filename":240,"language":249,"meta":155,"style":155},"import pleaseai from '@pleaseai\u002Feslint-config'\n\nexport default pleaseai({\n  rules: {\n    'antfu\u002Ftop-level-function': 'off',\n  },\n})\n",[59,1671,1672,1686,1690,1702,1711,1730,1734],{"__ignoreMap":155},[159,1673,1674,1676,1678,1680,1682,1684],{"class":161,"line":162},[159,1675,257],{"class":256},[159,1677,261],{"class":260},[159,1679,264],{"class":256},[159,1681,268],{"class":267},[159,1683,61],{"class":168},[159,1685,273],{"class":267},[159,1687,1688],{"class":161,"line":276},[159,1689,280],{"emptyLinePlaceholder":279},[159,1691,1692,1694,1696,1698,1700],{"class":161,"line":283},[159,1693,286],{"class":256},[159,1695,289],{"class":256},[159,1697,293],{"class":292},[159,1699,345],{"class":260},[159,1701,348],{"class":267},[159,1703,1704,1707,1709],{"class":161,"line":351},[159,1705,1706],{"class":361},"  rules",[159,1708,365],{"class":267},[159,1710,368],{"class":267},[159,1712,1713,1715,1717,1719,1721,1723,1726,1728],{"class":161,"line":358},[159,1714,454],{"class":267},[159,1716,1053],{"class":361},[159,1718,460],{"class":267},[159,1720,365],{"class":267},[159,1722,268],{"class":267},[159,1724,1725],{"class":168},"off",[159,1727,460],{"class":267},[159,1729,383],{"class":267},[159,1731,1732],{"class":161,"line":371},[159,1733,389],{"class":267},[159,1735,1736,1738],{"class":161,"line":386},[159,1737,476],{"class":267},[159,1739,479],{"class":260},[1741,1742,1743],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":155,"searchDepth":276,"depth":276,"links":1745},[1746,1747,1748,1753,1754,1755,1756,1757,1758],{"id":85,"depth":276,"text":86},{"id":144,"depth":276,"text":144},{"id":234,"depth":276,"text":234,"children":1749},[1750,1751,1752],{"id":303,"depth":283,"text":304},{"id":488,"depth":283,"text":489},{"id":618,"depth":283,"text":619},{"id":816,"depth":276,"text":817},{"id":915,"depth":276,"text":916},{"id":124,"depth":276,"text":124},{"id":1269,"depth":276,"text":1270},{"id":1355,"depth":276,"text":1356},{"id":1387,"depth":276,"text":1388,"children":1759},[1760,1761,1762,1763],{"id":1189,"depth":283,"text":1391},{"id":1418,"depth":283,"text":1419},{"id":1433,"depth":283,"text":1434},{"id":1546,"depth":283,"text":1547},"PleaseAI 프로젝트를 위한 의견이 반영된 ESLint flat config — @antfu\u002Feslint-config 기반.","md",null,{},{"icon":10},{"title":5,"description":1764},"Vq05GOULX7dGOxVg9TFopcBl--ElZklYYA4wynfoc8U",[1766,1772],{"title":12,"path":13,"stem":14,"description":1773,"children":-1},"ESLint로 package.json 파일을 린트하세요.",1776318392403]