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

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

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

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

ESLint

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

Q&A

0回答

883閲覧

ESLintで () 内のインデントが希望通りに設定できない

kinchiki

総合スコア11

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

ESLint

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

0グッド

0クリップ

投稿2018/08/18 11:54

編集2018/09/09 16:04

ESLintのインデントのルールで困っていることがあり質問しました。

やりたいこと

希望通りのインデントになるように、ESLintのルールを設定したいです。

環境

  • yarn: v1.9.4
  • @vue/cli: 3.0.0

vue-cli 3.0.0でアプリを作成し、vuetifyをaddしています。cliのほとんどの質問?はオンにしました。
それ意外のコードは問題箇所以外変えていません。

eslintのスタイルはAirbnbを選択しています。

$ vue create test-app $ vue add vuetify

現象

lintのエラーが出て、auto-fixすると()内のインデントが閉じカッコ含めて全てスペース2つに修正されてしまいます。

lint前の希望するインデントとエラー

コメントはeslintのエラー内容です。

js

1@Component({ 2 components: { 3 Helloworld, // [eslint] Expected indentation of 2 spaces but found 4. (indent) 4 }, 5}) // [eslint] Expected indentation of 2 spaces but found 0. (indent)

lint後のコード

js

1@Component({ 2 components: { 3 HelloWorld, 4 }, 5 })

試したこと

package.json に以下のようなrulesを追加しましたが、どれも期待通りにはなりませんでした。

"indent": 0 ならエラーは消えましたが、無効にはしたくないので、上手くルールを設定したいです。
スタイルをAirbnbから変えるという方法はできるだけしたくありませんが、そうすることも視野に入れています。

json

1// "rules" 2"indent": ["error", 2, { "ObjectExpression": 1 }] 3"indent": ["error", 2, { "CallExpression": {"arguments": 1} }], 4"indent": ["error", 2, { "FunctionExpression": {"body": 1, "parameters": 2} }]

ファイルの中身

package.json

json

1{ 2 "name": "test-app", 3 "version": "0.1.0", 4 "private": true, 5 "scripts": { 6 "serve": "vue-cli-service serve", 7 "build": "vue-cli-service build", 8 "lint": "vue-cli-service lint", 9 "test:unit": "vue-cli-service test:unit" 10 }, 11 "dependencies": { 12 "register-service-worker": "^1.0.0", 13 "vue": "^2.5.17", 14 "vue-class-component": "^6.0.0", 15 "vue-property-decorator": "^7.0.0", 16 "vue-router": "^3.0.1", 17 "vuetify": "^1.0.19", 18 "vuex": "^3.0.1" 19 }, 20 "devDependencies": { 21 "@babel/polyfill": "^7.0.0-beta.49", 22 "@types/jest": "^23.1.4", 23 "@vue/cli-plugin-babel": "^3.0.0", 24 "@vue/cli-plugin-eslint": "^3.0.0", 25 "@vue/cli-plugin-pwa": "^3.0.0", 26 "@vue/cli-plugin-typescript": "^3.0.0", 27 "@vue/cli-plugin-unit-jest": "^3.0.0", 28 "@vue/cli-service": "^3.0.0", 29 "@vue/eslint-config-airbnb": "^3.0.0", 30 "@vue/eslint-config-typescript": "^3.0.0", 31 "@vue/test-utils": "^1.0.0-beta.20", 32 "babel-core": "7.0.0-bridge.0", 33 "lint-staged": "^7.2.0", 34 "node-sass": "^4.9.0", 35 "sass-loader": "^7.0.1", 36 "ts-jest": "^23.0.0", 37 "typescript": "^3.0.0", 38 "vue-cli-plugin-vuetify": "^0.1.6", 39 "vue-template-compiler": "^2.5.17" 40 }, 41 "eslintConfig": { 42 "root": true, 43 "env": { 44 "node": true 45 }, 46 "extends": [ 47 "plugin:vue/essential", 48 "@vue/airbnb", 49 "@vue/typescript" 50 ], 51 "rules": { 52 "indent": ["error", 2, { "ObjectExpression": 1 }] 53 }, 54 "parserOptions": { 55 "parser": "typescript-eslint-parser" 56 } 57 }, 58 "postcss": { 59 "plugins": { 60 "autoprefixer": {} 61 } 62 }, 63 "browserslist": [ 64 "> 1%", 65 "last 2 versions", 66 "not ie <= 8" 67 ], 68 "jest": { 69 "moduleFileExtensions": [ 70 "js", 71 "jsx", 72 "json", 73 "vue", 74 "ts", 75 "tsx" 76 ], 77 "transform": { 78 "^.+\.vue$": "vue-jest", 79 ".+\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub", 80 "^.+\.tsx?$": "ts-jest" 81 }, 82 "moduleNameMapper": { 83 "^@/(.*)$": "<rootDir>/src/$1" 84 }, 85 "snapshotSerializers": [ 86 "jest-serializer-vue" 87 ], 88 "testMatch": [ 89 "**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)" 90 ], 91 "testURL": "http://localhost/" 92 }, 93 "gitHooks": { 94 "pre-commit": "lint-staged" 95 }, 96 "lint-staged": { 97 "*.js": [ 98 "vue-cli-service lint", 99 "git add" 100 ], 101 "*.vue": [ 102 "vue-cli-service lint", 103 "git add" 104 ] 105 } 106}

Home.vue (エラーが出るファイル)

js

1<template> 2 <div class="home"> 3 <img alt="Vue logo" src="../assets/logo.png"> 4 <HelloWorld msg="Welcome to Your Vue.js + TypeScript App"/> 5 </div> 6</template> 7 8<script lang="ts"> 9import { Component, Vue } from 'vue-property-decorator'; 10import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /src 11 12@Component({ 13 components: { 14 HelloWorld, 15 }, 16}) 17export default class Home extends Vue {} 18</script>

参考にしたページ

indent - Rules - ESLint - Pluggable JavaScript linter
eslintで、怒られないコードを書く - Qiita
ESLintについてのメモ - Qiita

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問