[VS Code] ๐ฝ Prettier ๋๊ตฌ ์ค์ ๋ฒ - ํ๋ฐฉ ์ฝ๋ ํฌ๋งทํฐ
VSCode - Prettier
Visual Studio Code์์๋ ์ฌ์ฉ์ ํธ์๋ฅผ ์ํด ์ฝ๋์ ์ค ๊ฐ๊ฒฉ์ด๋ ํ์ ์๋์ผ๋ก ๊น๋ํ๊ฒ ์ ๋ฆฌํด์ฃผ๋ ํ์ฅํ๋ก๊ทธ๋จ์ด ์กด์ฌํ๋ค.
์ค์น๋ฅผ ์๋ฃํ๋ฉด, ์๋ํฐ ๋ฐ๋ถ๋ถ์ Prettier: โ ํ์๊ฐ ๋์ด์๋ค๋ฉด ํ์ฑํ๋ ๊ฒ์ด๋ค.
Prettier - Code formatter - Visual Studio Marketplace
Extension for Visual Studio Code - Code formatter using prettier
marketplace.visualstudio.com
Prettier ์ค์
Format on Save ํ์ธ
- vscode ์ค์ ์์ format on save๋ฅผ ์ ๋ ฅํ๊ณ ๋์ค๋ ์ค์ ์ ์ฒดํฌ๋์ด ์๋ ์ง ํ์ธํ๋ค.
- ์ด ๊ธฐ๋ฅ์ ํญ์ ์ ์ฅ์ ํ ๋๋ง๋ค, ์์ฃผ ์ด์์ฅํ๊ฒ ํฌ๋งท์ ์ ์ ๋ก ์๋์ผ๋ก ์ ๋ ฌํด์ค๋ค.
Default Formatter ํ์ธ
- ๊ฐํน ์๋ํฐ์ default๋ก ์ค์ ๋์ด ์๋ formatter๊ฐ null ์ด๊ฑฐ๋ ์ค์ ์ด ์๋ชป๋์ด ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ์ค์ ์ด prettier format (esbenp.prettier-vscode) ๋ก ์ค์ ๋์ด ์๋ ์ง ํ์ธํด์ผ ํ๋ค.
Prettier ์ต์ ์์ฑ
{
// ํ ์ค์ด ์ด ๊ธ์์๋ฅผ ๋๊ฒ ๋๋ฉด ๋ค์ฌ์ฐ๊ธฐ๋์ด ์ฝ๋๊ฐ ์ธ๋ก๋ก ์ ๋ฆฌ๋๋ค. (default: 80)
"printWidth": 120,
// ํญ ๋๋น (default: 2)
"tabWidth": 3,
// ํญ ์ฌ์ฉ ์ฌ๋ถ. ์ฐธ์ด๋ฉด ํญ์ด์๋ ์ค์ ๋ค์ฌ ์ฐ๊ธฐ ํ๋ค. (default: false)
"useTabs": false,
// ์ธ๋ฏธํด๋ก ๊ฐ์ ์ฌ๋ถ (default: true)
"semi": true,
// ํ๋ฐ์ดํ๋ฅผ ์ธ๊ฑด์ง ์ค์ . ๊ธฐ๋ณธ๊ฐ์ ์๋ฐ์ดํ. ์ฝ๋ฉ์ ํ๋ฉด์ ํ๋ฐ์ดํ๋ฅผ ์ผ๋ค๋ฉด ๊ฐ์ ๋ก ์๋ฐ์ดํ๋ก ๋ณ๊ฒฝ. (default: false)
"singleQuote": true,
/*
๊ฐ์ฒด, ๋ฐฐ์ด, ํจ์ ๋ฑ์ ํํ์ ์ผํ๋ฅผ ์ฐ์์ง ์ ์ด
"none" - ์ผํ๋ฅผ ๋ถํ์ง ์์
"es5" - ES5์์ ์ ํจํ ํํ ์ผํ ๋ถํ (๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ)
"all" - ๊ฐ๋ฅํ๋ฉด ํํ ์ผํ๋ฅผ ๋ถํ (ํจ์ ์ธ์)
*/
"trailingComma": "all",
// ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์ฌ์ฉ์ ๊ดํธ์ ๊ณต๋ฐฑ ์ฝ์
์ฌ๋ถ (default: true)
"bracketSpacing": true,
// JSX์ ๋ง์ง๋ง `>`๋ฅผ ๋ค์ ์ค๋ก ๋ด๋ฆด์ง ์ฌ๋ถ
"jsxBracketSameLine": true,
// ๋จ๋
ํ์ดํ ํจ์์ ๋งค๊ฐ ๋ณ์ ์ฃผ์์ ๊ดํธ๋ฅผ ์๋์ผ๋ก ๋ถํ (default: 'avoid')
"arrowParens": "avoid",
// vue ํ์ผ์ script์ styleํ๊ทธ ๋ค์ฌ์ฐ๊ธฐ ์ฌ๋ถ
"vueIndentScriptAndStyle": false,
// ๋งจ๋ง์ง๋ง ์ค ๋ฃ๋์ง ์ฌ๋ถ
"endOfLine": "auto",
// ์ด ํ์ฅ ๊ธฐ๋ฅ์ ๋นํ์ฑํ ํ ์ธ์ด ID ๋ชฉ๋ก
"disableLanguages" : ["vue"]
}
Prettier ์ค์ ํ์ผ ์ฐ์ ์์
Prettier์ ์ค์ ํ์ผ์ ์๋์ ์ฐ์ ์์๋ก ์ ์ฉ์ด ๋๋ค.
- ๋จผ์ settings.json์ ์ค์ ํ ์ธํ ๊ฐ์ ์ ์ฉํ๋ค.
- ๋ง์ฝ ํ๋ก์ ํธ์ EditorConfig์ ์ค์ ํ์ผ์ธ .editorconfig๊ฐ ์์ผ๋ฉด ์ด ์ค์ ์ด ๋ฎ์ด์ด๋ค.
- ๋ง์ง๋ง์ผ๋ก Prettier์ ๊ณ ์ ํ ์ค์ ํ์ผ์ธ .prettierrc๊ฐ ํ๋ก์ ํธ์ ์์ผ๋ฉด ์ด ๊ฐ์ ์ต์ข ์ ์ผ๋ก ์ ์ฉํ๊ฒ ๋๋ค
VScode์ settings.json์ ํ๋ฆฌํฐ์ด ์์ฑ๊ฐ์ ์ค์ ํ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ์ค์ ๊ณผ ๋ฌ๋ฆฌ ์ธํ ๊ฐ์ ๋ง๋จธ๋ฆฌ์ prettier.๋ฅผ ์ผ์ผํ ๋ถ์ฌ์ฃผ์ด์ผ ํ๋ค.
// .settings.json
{
"prettier.useEditorConfig": false,
"prettier.printWidth": 120,
"prettier.tabWidth": 3,
"prettier.useTabs": false,
"prettier.semi": true,
"prettier.singleQuote": true,
"prettier.trailingComma": "all",
"prettier.bracketSpacing": true,
"prettier.jsxBracketSameLine": true,
"prettier.arrowParens": "avoid",
"prettier.vueIndentScriptAndStyle": false,
"prettier.endOfLine": "auto"
}
๋ง์ผ ๋ก์ปฌ์ ์๋ ํ๋ฆฌํฐ์ด ์ค์ ์ ๋ฌด์ํ๊ณ , ํ๋ก์ ํธ ์ค์ ์ ์๋ ์ปจ๋ฒค์ ์ ๋ง๊ฒ ํ๋ฆฌํฐ์ด๊ฐ ์๋ํ๊ฒ ํ๋ ค๋ฉด, ๊ฐ๋ฐํ๋ ํ๋ก์ ํธ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ .prettierrc.json๋ฅผ ์์ฑํ๋ค.
// .prettierrc.json
{
"printWidth": 120,
"tabWidth": 3,
"useTabs": false,
"semi": true,
"singleQuote": true,
"trailingComma": "all",
"bracketSpacing": true,
"jsxBracketSameLine": true,
"arrowParens": "avoid",
"vueIndentScriptAndStyle": false,
"endOfLine": "auto"
}