Skip to content
This repository has been archived by the owner on Aug 18, 2021. It is now read-only.

no-unused-vars, no-undef errors in simple ES6 class / react example #21

Closed
chmanie opened this issue Mar 1, 2015 · 20 comments
Closed

Comments

@chmanie
Copy link

chmanie commented Mar 1, 2015

index_es6.js (using the react 0.13 syntax)

'use strict';

import React from 'react';

class HelloMessage extends React.Component {
  render() {
    return <div>Hello {this.props.name}</div>;
  }
}

React.render(<HelloMessage name="Sebastian" />, document.body);

eslint output (using eslint-babel):

index_es6.js
   5:6   error  HelloMessage is defined but never used  no-unused-vars
  11:14  error  'HelloMessage' is not defined           no-undef

index_es5.js

'use strict';

var React = require('react');

var HelloMessage = React.createClass({
    render: function () {
        return <div>Hello {this.props.name}</div>;
    }
});

React.render(<HelloMessage name="Sebastian" />, document.body);

eslint output (using eslint-babel):

src/app/index_old.js
  11:14  error  'HelloMessage' is not defined  no-undef

Is this an issue or am I doing something stupid here?

@RnbWd
Copy link

RnbWd commented Mar 2, 2015

I'm getting that error for all classes

@RnbWd
Copy link

RnbWd commented Mar 2, 2015

specifically classes are "defined but never used" warning is coming up

@WRidder
Copy link

WRidder commented Mar 2, 2015

+1 Got the same errors regarding "defined but never used"

@megamaddu
Copy link

Also having this problem. I have a module that exports a class (export default class SomeClass) and a utility module that individually exports named functions (export function someHelper...). It doesn't like either one.

@gaearon
Copy link
Member

gaearon commented Mar 6, 2015

This seems to dupe #8.

BenoitZugmeyer added a commit to BenoitZugmeyer/babel-eslint that referenced this issue Mar 7, 2015
eslint does not support an escope "module" scope but we need it to
support modules syntax.

Simply pushing all variables from the "module" scope in the "global"
scope should fix many issues: babel#8, babel#15, babel#17, babel#21, babel#29
@sebmck
Copy link
Contributor

sebmck commented Apr 14, 2015

Can you please verify that this issue still exists on 3.0.1?

@jerrysu
Copy link

jerrysu commented Apr 14, 2015

I'm still seeing this with babel-eslint@3.0.1.

However, when using eslint-plugin-react with babel-eslint, I don't have these issues any longer.

@mridgway
Copy link

Confirmed still seeing this issue with [email protected] and [email protected].

@cemckinley
Copy link

I am also seeing this issue with [email protected] and [email protected]. Looks like this also came up before with eslint but was fixed there: eslint/eslint#1534

@grahamb
Copy link

grahamb commented May 8, 2015

Similar to @cemckinley, I'm seeing this with [email protected] and [email protected].

'use strict';

import React from 'react';
import Router from 'react-router';
import CreateSpace from 'apps/CreateSpace';
import MySpaces from 'apps/MySpaces';
import SpaceDirectory from 'apps/SpaceDirectory';

const { Route, NotFoundRoute, DefaultRoute, Link, RouteHandler } = Router;

if (__DEV__) {
  require('../scss/dev.scss');
}

const App = React.createClass({
  render() {
    return (
      <RouteHandler />
    );
  }
});

const NotFound = React.createClass({
  render() {
    const divstyle = {
      textAlign: 'center',
      paddingTop: '35px'
    };

    const imgstyle = {
      width: '25%'
    };

    return (
      <div style={divstyle}>
        <img style={imgstyle} src="/images/sadpanda.svg" alt="The panda is sad because it couldn't find the page you wanted" />
        <h2>Page Not Found</h2>
        <p>Oops, we couldn't find that page.</p>
      </div>
    );
  }
});

const route_base_path = __DEV__ ? '/' : '/canvasspaces';
const routes = (
  <Route name="app" path={route_base_path} handler={App}>
    <Route name="create_space" handler={CreateSpace} />
    <Route name="my_spaces" handler={MySpaces} />
    <Route name="space_directory" handler={SpaceDirectory} />
    <DefaultRoute handler={MySpaces} />
    <NotFoundRoute handler={NotFound}/>
  </Route>
);

Router.run(routes, Router.HistoryLocation, (Handler) => {
  React.render(<Handler/>, document.getElementById('CanvasSpacesApp'));
});

export default App;
   9:8   error  Route is defined but never used          no-unused-vars
   9:15  error  NotFoundRoute is defined but never used  no-unused-vars
   9:30  error  DefaultRoute is defined but never used   no-unused-vars
   9:44  error  Link is defined but never used           no-unused-vars
   9:50  error  RouteHandler is defined but never used   no-unused-vars
  55:44  error  Handler is defined but never used        no-unused-vars

 6 problems (6 errors, 0 warnings)

My .eslintrc file:

{
  "parser": "babel-eslint",
  "env": {
    "browser": true,
    "node": true,
    "es6": true
  },
  "globals": {
    "__DEV__": true
  },
  "rules": {
    "quotes": [2, "single"],
    "eol-last": [1],
    "no-mixed-requires": [0],
    "no-underscore-dangle": [0],
    "camelcase": [0]
  }
}

@RnbWd
Copy link

RnbWd commented May 9, 2015

However, when using eslint-plugin-react with babel-eslint, I don't have these issues any longer.

eh? is that a solution? I stopped noticing the errors when I included the react-plugin, but haven't worked on anything this week.

@sebmck
Copy link
Contributor

sebmck commented May 9, 2015

Yup, it's the solution. Use the eslint-plugin-react rules if you're using JSX. It can't really be fixed on the babel-eslint side.

@sebmck sebmck closed this as completed May 9, 2015
@hzoo hzoo added bug duplicate and removed bug labels Aug 15, 2015
@lolsborn
Copy link

lolsborn commented Sep 4, 2015

It seems the eslint react plugin fixes this error, but it exists outside of react projects.

Something as simple as

class Item {
  constructor() {
    this.id = 0;
  }
}

Will produce this error, it doesn't have to extend a React component. Pulling in the eslint react plugin to solve the issue when I'm not using react seems like a lazy work around.

@hzoo
Copy link
Member

hzoo commented Sep 4, 2015

Can you reproduce with the regular parser, maybe an eslint issue. But, if you export the class it should be fixed.

@tjwebb
Copy link

tjwebb commented May 23, 2016

I'm running into this issue with a regular ES6 class.

@jesusreal
Copy link

Yes, me too. I am using the class only in the ReactDOM.render() method. I wonder if this bug was reintroduced in the last upgrade. For the time being I had to disable the "no-unused-vars" rule.

@danez
Copy link
Member

danez commented May 23, 2016

Can one of you please open a new bug with an example and the according eslintrc file. Thanks.

@jesusreal
Copy link

Hi, sorry for not answering before, I will do it :)

@jesusreal
Copy link

I investigated the bug and it seems to be an eslint issue. I still have the same problem if I use:
parserOptions: { "ecmaVersion": 6, "sourceType": "module", "ecmaFeatures": { "jsx": true } },
instead of:
parser: 'babel-eslint',

@jesusreal
Copy link

In case it can help someone, my issue was resolved here: eslint/eslint#6303

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests