Error arrow function used ambiguously with a conditional expression

My codebase is full of .js files and I am running eslint on a particular file. I get below errors: 1:8 error 'React' is defined but never used no-unused-vars 1:27

My codebase is full of .js files and I am running eslint on a particular file.
I get below errors:

 1:8   error  'React' is defined but never used
                              no-unused-vars
1:27  error  Trailing spaces not allowed
                              no-trailing-spaces
2:1   error  'prop-types' should be listed in the project's dependencies. Run
'npm i -S prop-types' to add it  import/no-extraneous-dependencies
7:13  error  Arrow function used ambiguously with a conditional expression
                              no-confusing-arrow
11:3   error  Prop type `array` is forbidden
                              react/forbid-prop-types

My .eslintrc.js

module.exports = {
  env: {
    browser: true,
    commonjs: true,
    es6: true,
  },
  extends: [
    'airbnb',
    "plugin:react/recommended"
  ],
  globals: {
    Atomics: 'readonly',
    SharedArrayBuffer: 'readonly',
  },
  parserOptions: {
    ecmaFeatures: {
      jsx: true,
    },
    ecmaVersion: 2018,
  },
  plugins: [
    'react'
  ],
  rules: {
    "react/jsx-uses-react": 1,
  },
};

My Package.json

"devDependencies": {
    "@commitlint/cli": "^8.1.0",
    "@commitlint/config-conventional": "^8.1.0",
    "babel-cli": "6.18.0",
    "babel-plugin-dynamic-import-node": "1.0.0",
    "babel-plugin-react-intl": "2.2.0",
    "babel-plugin-react-transform": "2.0.2",
    "babel-plugin-transform-es2015-modules-commonjs": "6.18.0",
    "babel-plugin-transform-react-constant-elements": "6.9.1",
    "babel-plugin-transform-react-inline-elements": "6.8.0",
    "babel-plugin-transform-react-remove-prop-types": "0.2.11",
    "babel-preset-latest": "6.16.0",
    "babel-preset-react-hmre": "1.1.1",
    "circular-dependency-plugin": "2.0.0",
    "coveralls": "2.11.15",
    "css-loader": "^0.23.1",
    "enzyme": "^2.7.0",
    "eslint": "3.11.1",
    "eslint-config-airbnb": "13.0.0",
    "eslint-config-airbnb-base": "10.0.1",
    "eslint-import-resolver-webpack": "0.8.0",
    "eslint-plugin-import": "2.2.0",
    "eslint-plugin-jsx-a11y": "2.2.3",
    "eslint-plugin-react": "6.7.1",
    "eslint-plugin-redux-saga": "0.1.5",
    "eventsource-polyfill": "0.9.6",
    "exports-loader": "0.6.3",
    "file-loader": "^0.9.0",
    "html-loader": "0.4.4",
    "html-webpack-plugin": "2.24.1",
    "husky": "^3.0.5",
    "lint-staged": "^3.2.1",
    "ngrok": "2.2.4",
    "npm-run-all": "^4.1.5",
    "prettier": "^1.18.2",
    "standard-version": "^7.0.0",
    "webpack-dev-middleware": "^1.11.0",
    "webpack-hot-middleware": "^2.18.0"
}

I tried with various solutions below:

/*eslint-disable no-unused-vars*/
var React = require('react');
/*eslint-enable no-unused-vars*/

And:

var React = require('react');    // eslint-disable-line no-unused-vars

but can’t do it for almost 300-500 files.

expectations is to resolve all the errors thrown in .js files.

Thanks in advance.

Александр Здрачек

У меня линтер ругается error Arrow function used ambiguously with a conditional expression no-confusing-arrow на функцию

// removed

Уже не в первом задании.
Насколько критично переписывать такое на if и return?


3


0

Используйте Хекслет по-максимуму!


  • Задавайте вопросы по уроку

  • Проверяйте знания в квизах

  • Проходите практику прямо в браузере

  • Отслеживайте свой прогресс

Зарегистрируйтесь или
войдите в свой аккаунт

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик

Разработка фронтенд-компонентов для веб-приложений



9 февраля



10 месяцев

Иконка программы Онлайн-буткемп. Фронтенд-разработчик

Интенсивное обучение профессии в режиме полного дня



9 февраля



4 месяца

Иконка программы Python-разработчик

Разработка веб-приложений на Django



9 февраля



10 месяцев

Иконка программы Java-разработчик

Разработка приложений на языке Java



9 февраля



10 месяцев

Иконка программы PHP-разработчик

Разработка веб-приложений на Laravel



9 февраля



10 месяцев

Иконка программы Инженер по тестированию

Ручное тестирование веб-приложений



9 февраля



4 месяца

Иконка программы Node.js-разработчик

Разработка бэкенд-компонентов для веб-приложений



9 февраля



10 месяцев

Иконка программы Fullstack-разработчик

Разработка фронтенд- и бэкенд-компонентов для веб-приложений



9 февраля



16 месяцев

Иконка программы Разработчик на Ruby on Rails

Создание веб-приложений со скоростью света



9 февраля



5 месяцев

Иконка программы Верстальщик

Верстка с использованием последних стандартов CSS



в любое время



5 месяцев

Иконка программы Аналитик данных

Профессия

В разработке
с нуля

Сбор, анализ и интерпретация данных



16 марта



8 месяцев

Disallow arrow functions where they could be confused with comparisons

🔧 Fixable

Some problems reported by this rule are automatically fixable by the --fix command line option

Arrow functions (=>) are similar in syntax to some comparison operators (>, <, <=, and >=). This rule warns against using the arrow function syntax in places where it could be confused with a comparison operator.

Here’s an example where the usage of => could be confusing:

// The intent is not clear
var x = a => 1 ? 2 : 3;
// Did the author mean this
var x = function (a) {
    return 1 ? 2 : 3;
};
// Or this
var x = a <= 1 ? 2 : 3;

Rule Details

Examples of incorrect code for this rule:

/*eslint no-confusing-arrow: "error"*/
/*eslint-env es6*/

var x = a => 1 ? 2 : 3;
var x = (a) => 1 ? 2 : 3;

Examples of correct code for this rule:

/*eslint no-confusing-arrow: "error"*/
/*eslint-env es6*/
var x = a => (1 ? 2 : 3);
var x = (a) => (1 ? 2 : 3);
var x = (a) => {
    return 1 ? 2 : 3;
};
var x = a => { return 1 ? 2 : 3; };

Options

This rule accepts two options argument with the following defaults:

{
    "rules": {
        "no-confusing-arrow": [
            "error",
            { "allowParens": true, "onlyOneSimpleParam": false }
        ]
    }
}

allowParens is a boolean setting that can be true(default) or false:

  1. true relaxes the rule and accepts parenthesis as a valid “confusion-preventing” syntax.
  2. false warns even if the expression is wrapped in parenthesis

Examples of incorrect code for this rule with the {"allowParens": false} option:

/*eslint no-confusing-arrow: ["error", {"allowParens": false}]*/
/*eslint-env es6*/
var x = a => (1 ? 2 : 3);
var x = (a) => (1 ? 2 : 3);

onlyOneSimpleParam is a boolean setting that can be true or false(default):

  1. true relaxes the rule and doesn’t report errors if the arrow function has 0 or more than 1 parameters, or the parameter is not an identifier.
  2. false warns regardless of parameters.

Examples of correct code for this rule with the {"onlyOneSimpleParam": true} option:

/*eslint no-confusing-arrow: ["error", {"onlyOneSimpleParam": true}]*/
/*eslint-env es6*/
() => 1 ? 2 : 3;
(a, b) => 1 ? 2 : 3;
(a = b) => 1 ? 2 : 3;
({ a }) => 1 ? 2 : 3;
([a]) => 1 ? 2 : 3;
(...a) => 1 ? 2 : 3;

Version

This rule was introduced in ESLint v2.0.0-alpha-2.

Resources

  • Rule source
  • Tests source

не могу проверить, но если память не изменяет;

${(props) => (props.hidden ? 'hidden' : 'visible')}

избавится от этого сообщения о ворсинах

Это, безусловно, одно из тех правил ESLint, которые могут действовать вам на нервы! Обычно я делаю именно то, что предлагал @GGAlanSmithee , но для этого потребуется, чтобы для параметра ESLint allowParens установлено значение true, например:

/* eslint no-confusing-arrow: ["error", {allowParens: true}] */

export const ProgressBarWrapper = styled.div`
  ...
  visibility: ${(props) => (props.hidden ? 'hidden' : 'visible')};
  ...

Другой вариант — отключить правило, а затем оставить код как есть:
/* eslint no-confusing-arrow: ["off"] */

Если вы хотите применить эти правила ко всему проекту, добавьте их в свой package.json разделе eslintConfig .

Возможно, этот шаблон может добавить одно из вышеперечисленных правил глобально, я бы предложил ["error", {allowParens: true}] .
Что думают все ???

http://eslint.org/docs/rules/no-confusing-arrow

Давайте просто отключим это правило, потому что это стиль, который мы поощряем со стороны styled-components , так что это не должно быть проблемой в шаблоне.

@GGAlanSmithee Ваше решение работало без установки {allowParens: true} . Нам все еще нужно глобально отключить это правило? Копия: @mxstbr @ samit4me

Это должно зависеть от того, какой плагин / редактор ESLint вы используете, потому что в документации указано, что для allowParens по умолчанию установлено значение false. Я использую VSCode, и если я не укажу allowParens: true он показывает ошибки в круглых скобках.

Я согласен с Максом в отключении этого правила, обычно оно причиняет больше боли, чем пользы.

Этот поток был автоматически заблокирован, поскольку после его закрытия в последнее время не было никаких действий. Пожалуйста, откройте новую проблему для связанных ошибок.

Запретить функции стрелок там,где их можно перепутать со сравнениями

🛠 Fixable

Некоторые проблемы, о которых сообщает это правило, автоматически устраняются с помощью параметра командной строки --fix .

Функции стрелок ( => ) аналогичны по синтаксису некоторым операторам сравнения ( > , < , <= и >= ). Это правило предостерегает от использования синтаксиса стрелочной функции там, где его можно спутать с оператором сравнения.

Вот пример, когда использование => может сбивать с толку:


Rule Details

Примеры неправильного кода для этого правила:

var x = a => 1 ? 2 : 3;var x = (a) => 1 ? 2 : 3;

Примеры правильного кода для этого правила:

var x = a => (1 ? 2 : 3);var x = (a) => (1 ? 2 : 3);var x = (a) => {    return 1 ? 2 : 3;};var x = a => { return 1 ? 2 : 3; };

Options

Это правило принимает два аргумента опций со следующими значениями по умолчанию:

{    "rules": {        "no-confusing-arrow": [            "error",            { "allowParens": true, "onlyOneSimpleParam": false }        ]    }}

allowParens — это логическое значение, которое может иметь значение true (по умолчанию) или false :

  1. true ослабляет правило и принимает круглые скобки как допустимый синтаксис, «предотвращающий путаницу».
  2. false предупреждает, даже если выражение заключено в круглые скобки

Примеры некорректного кода для этого правила с {"allowParens": false} :

var x = a => (1 ? 2 : 3);var x = (a) => (1 ? 2 : 3);

onlyOneSimpleParam — это логический параметр, который может принимать значения true или false (по умолчанию):

  1. true ослабляет правило и не сообщает об ошибках, если стрелочная функция имеет 0 или более 1 параметров или параметр не является идентификатором.
  2. false предупреждения независимо от параметров.

Примеры правильного кода для этого правила с параметром {"onlyOneSimpleParam": true} :

() => 1 ? 2 : 3;(a, b) => 1 ? 2 : 3;(a = b) => 1 ? 2 : 3;({ a }) => 1 ? 2 : 3;([a]) => 1 ? 2 : 3;(...a) => 1 ? 2 : 3;

  • no-constant-condition
  • arrow-parens

Version

Это правило было введено в ESLint v2.0.0-alpha-2.

Resources

  • Rule source
  • Tests source


ESLint

8.30

  • no-compare-neg-zero

    Запретить сравнение с -0 Свойство «extends»: «eslint:recommended» файл конфигурации включает это правило Правило должно предупреждать о коде, который

  • no-cond-assign

    Запретить операторы присваивания в условных выражениях. Свойство «extends»: «eslint:recommended» файл конфигурации включает это правило.

  • no-console

    Запретите использование консоли В JavaScript,предназначенном для выполнения в браузере,считается лучшей практикой избегать использования методов консоли.

  • no-const-assign

    Запретить переназначение константных переменных. Свойство «extends»: «eslint:recommended» файл конфигурации включает это правило. Мы не можем изменять переменные, которые

Моя кодовая база заполнена файлами .js, и я использую eslint для определенного файла. Я получаю следующие ошибки:

 1:8   error  'React' is defined but never used
                              no-unused-vars
1:27  error  Trailing spaces not allowed
                              no-trailing-spaces
2:1   error  'prop-types' should be listed in the project's dependencies. Run
'npm i -S prop-types' to add it  import/no-extraneous-dependencies
7:13  error  Arrow function used ambiguously with a conditional expression
                              no-confusing-arrow
11:3   error  Prop type `array` is forbidden
                              react/forbid-prop-types

Мой .eslintrc.js

module.exports = {
  env: {
    browser: true,
    commonjs: true,
    es6: true,
  },
  extends: [
    'airbnb',
    "plugin:react/recommended"
  ],
  globals: {
    Atomics: 'readonly',
    SharedArrayBuffer: 'readonly',
  },
  parserOptions: {
    ecmaFeatures: {
      jsx: true,
    },
    ecmaVersion: 2018,
  },
  plugins: [
    'react'
  ],
  rules: {
    "react/jsx-uses-react": 1,
  },
};

Мой Package.json

"devDependencies": {
    "@commitlint/cli": "^8.1.0",
    "@commitlint/config-conventional": "^8.1.0",
    "babel-cli": "6.18.0",
    "babel-plugin-dynamic-import-node": "1.0.0",
    "babel-plugin-react-intl": "2.2.0",
    "babel-plugin-react-transform": "2.0.2",
    "babel-plugin-transform-es2015-modules-commonjs": "6.18.0",
    "babel-plugin-transform-react-constant-elements": "6.9.1",
    "babel-plugin-transform-react-inline-elements": "6.8.0",
    "babel-plugin-transform-react-remove-prop-types": "0.2.11",
    "babel-preset-latest": "6.16.0",
    "babel-preset-react-hmre": "1.1.1",
    "circular-dependency-plugin": "2.0.0",
    "coveralls": "2.11.15",
    "css-loader": "^0.23.1",
    "enzyme": "^2.7.0",
    "eslint": "3.11.1",
    "eslint-config-airbnb": "13.0.0",
    "eslint-config-airbnb-base": "10.0.1",
    "eslint-import-resolver-webpack": "0.8.0",
    "eslint-plugin-import": "2.2.0",
    "eslint-plugin-jsx-a11y": "2.2.3",
    "eslint-plugin-react": "6.7.1",
    "eslint-plugin-redux-saga": "0.1.5",
    "eventsource-polyfill": "0.9.6",
    "exports-loader": "0.6.3",
    "file-loader": "^0.9.0",
    "html-loader": "0.4.4",
    "html-webpack-plugin": "2.24.1",
    "husky": "^3.0.5",
    "lint-staged": "^3.2.1",
    "ngrok": "2.2.4",
    "npm-run-all": "^4.1.5",
    "prettier": "^1.18.2",
    "standard-version": "^7.0.0",
    "webpack-dev-middleware": "^1.11.0",
    "webpack-hot-middleware": "^2.18.0"
}

Я пробовал использовать различные решения ниже:

/*eslint-disable no-unused-vars*/
var React = require('react');
/*eslint-enable no-unused-vars*/

А также:

var React = require('react');    // eslint-disable-line no-unused-vars

Но не может этого сделать почти для 300-500 файлов.

Ожидания заключается в устранении всех ошибок, возникающих в файлах .js.

Заранее спасибо.

2 ответа

npm install eslint-plugin-react --save-dev

В разделе расширений .eslintrc.json включите следующий плагин:

{
 "plugins": [
    "react"
  ],
  "extends": ["eslint:recommended", "plugin:react/recommended"]
}


1

Coderboi
15 Окт 2019 в 11:13

Вот что означает каждая из этих ошибок и как их исправить:


1:8 error 'React' is defined but never used:

Правило Eslint no-unused-vars не распознает переменные, используемые в JSX. Измените свои правила eslint следующим образом:

rules: {
    "react/jsx-uses-react": 1,
},

К этому:

rules: {
    "react/jsx-uses-react": 1,
    "react/jsx-uses-vars": 1
},

1:27 error Trailing spaces not allowed

У вас есть конечный пробел где-то в строке 27 в конце вашей строки, удалите его, и ошибка должна исчезнуть.


Ошибка 2: 1 "prop-types" должна быть указана в зависимостях проекта. Запустить "npm i -S prop-types", чтобы добавить его

prop-types не указан в вашем package.json как зависимость. Это довольно просто исправить, как и предполагает ошибка. Запустите npm i -S prop-types в своем терминале, чтобы добавить его в свой package.json.


7:13 error Arrow function used ambiguously with a conditional expression

Это довольно сложно исправить, не видя строку кода, из которой возникает эта ошибка. Но я предполагаю, что вы используете conditional expression в arrow function, примерно так:

const arrow = (boolean) => boolean ? true : false

Оберните свою функцию скобками, чтобы исправить эту проблему следующим образом:

const arrow = (boolean) => ( boolean ? true : false )

Или это:

const arrow = (boolean) => { return boolean ? true : false }


11:3 error Prop type массив is forbidden

Eslint хочет, чтобы вы использовали arrayOf вместо array в своем prop-types:

Что-то вроде этого: arrayOf(string)


0

Luze
15 Окт 2019 в 11:10

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

Понравилась статья? Поделить с друзьями:
  • Error arrow function should not return assignment no return assign
  • Error array variable has incorrect number of subscripts or subscript dimension range exceeded
  • Error base 1003
  • Error array used as initializer
  • Error bars что это