質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ESLint

ESLintは、JavaScriptのための構文チェックツール。全検証ルールを自由に on/offでき、独自のプロジェクトに合わせたカスタムルールを容易に設定することが可能。公開されている様々なプラグインを組み込んで使用することもできます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

1776閲覧

JSXの属性値をコードフォーマッターで自動改行したい(インデントも)

teraha

総合スコア59

ESLint

ESLintは、JavaScriptのための構文チェックツール。全検証ルールを自由に on/offでき、独自のプロジェクトに合わせたカスタムルールを容易に設定することが可能。公開されている様々なプラグインを組み込んで使用することもできます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/10/08 09:04

前提・実現したいこと

VSCodeエディタで、TypeScript + Reactのコードを書いています。

コードフォーマッター(自動整形)がうまくいかず困っています。

JSXタグの属性値を改行したいのですが、自動整形機能のせいで改行無しの状態に戻されてしまいます。

なんとか改行できるように設定を変更すると、今度は自動インデントの機能が効かなくなってしまいます。

・属性値が複数ある場合は改行をする
・自動インデントを有効にする
これを両立させたいです。

発生している問題・該当のソースコード

<img src={logo} className='App-logo' alt='logo' /> の部分に注目して以下をご覧ください。

Javascript

1// App.tsxの中身1 2function App() { 3 return ( 4 <div className='App'> 5 <header className='App-header'> 6// 最初の状態 7 <img src={logo} className='App-logo' alt='logo' /> 8 <p> 9 Edit <code>src/App.tsx</code> and save to reload. 10 </p> 11 <a 12 className='App-link' 13 href='https://reactjs.org' 14 target='_blank' 15 rel='noopener noreferrer' 16 > 17 Learn React 18 </a> 19 </header> 20 </div> 21 ); 22}

Javascript

1// App.tsxの中身2 2import React from 'react'; 3import logo from './logo.svg'; 4import './App.css'; 5 6function App() { 7 return ( 8 <div className='App'> 9 <header className='App-header'> 10 11// この状態にしたい(属性値を改行したい) 12 <img 13 src={logo} 14 className='App-logo' 15 alt='logo' 16 /> 17 <p> 18 Edit <code>src/App.tsx</code> and save to reload. 19 </p> 20 <a 21 className='App-link' 22 href='https://reactjs.org' 23 target='_blank' 24 rel='noopener noreferrer' 25 > 26 Learn React 27 </a> 28 </header> 29 </div> 30 ); 31} 32 33export default App; 34

Javascript

1// App.tsxの中身3 2import React from 'react'; 3import logo from './logo.svg'; 4import './App.css'; 5 6function App() { 7 return ( 8 <div className='App'> 9 <header className='App-header'> 10 11// こうなってしまう(改行するとインデント機能が効かない) 12 <img 13src={logo} 14className='App-logo' 15alt='logo' /> 16 <p> 17 Edit <code>src/App.tsx</code> and save to reload. 18 </p> 19 <a 20 className='App-link' 21 href='https://reactjs.org' 22 target='_blank' 23 rel='noopener noreferrer' 24 > 25 Learn React 26 </a> 27 </header> 28 </div> 29 ); 30} 31 32export default App; 33

試したこと

Windows 8.1 の環境で
コマンドプロンプトからtypescriptのreactプロジェクトを作成。

Windowsコマンドプロンプト

1create-react-app my-app --template typescript

App.tsxはこのタイミングで自動的に生成される。

my-appフォルダに.eslintrcというファイルを作成。
.eslintrcの中に以下の内容を記述。

// .eslintrcの中身 { "extends": "react-app", "rules": { "react/jsx-first-prop-new-line": [1, "multiline"], "react/jsx-max-props-per-line": [1, { "maximum": 1 } ] } }

"react/jsx-max-props-per-line"の設定により、JSXの属性が2個以上あるときは、自動改行されるようになります。
VSCodeでファイルを保存した瞬間に改行され、「App.tsxの中身3」の状態になります。

これに加えて、自動インデント機能を有効にしようと、settings.jsonの中に
"editor.formatOnSave": true
という記述を追加しました。

これにより自動インデントなどの機能は有効になるのですが、
ファイルを保存したタイミングで、「App.tsxの中身1」の状態になってしまいます。

おそらく、editorconfigもしくはprettierの
「1行は80文字を越えるときは自動的に改行する」という機能のせいで
80文字以内に収まるときは改行を強制的に無効化されている気がします。

JSXタグの属性値を改行しつつ、インデントもさせたいのですが、editorconfigとprettierとeslintのどの機能がどう干渉しあっているのか特定できていません。

いまは、App.tsxファイルを保存した瞬間に画面が一瞬ちらついて、
imgタグの部分が一瞬だけ下記の状態になり、

Javascript

1 <img 2src={logo} 3className='App-logo' 4alt='logo' />

最終的には下記の状態になっているっぽいです。

Javascript

1 <img src={logo} className='App-logo' alt='logo' />

このことから、.eslintrcの
"react/jsx-max-props-per-line"
の設定がまず最初に適用されて、
その後に、editorconfigかpretteirがコードを再フォーマットしているっぽいです。

Javascript

1 <img 2 src={logo} 3 className='App-logo' 4 alt='logo' 5 />

こういう感じのコード整形がされるようにするには、何をどう設定すればいいのでしょうか?

補足情報(FW/ツールのバージョンなど)

VSCodeに以下のエクステンションを入れています。
・EditorConfig for VS Code
・ESLint
・Prettier - Code formatter

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問