import/namespace does not detect when something in a closer scope shadows a namespace import, leading to bogus lint warnings.
This example is a bit bigger than necessary, but it is closer to the conditions where I encountered it:
import React, { PropTypes } from 'react'
import { createStructuredSelector } from 'reselect'
import { connect } from 'react-redux'
import * as todos from 'ducks/todos'
const mapStateToProps = createStructuredSelector({
todos: todos.getTodos
})
const TodoApp = ({
todos
}) => (
<ol>
{/* import/namespace 'map' not found in imported namespace 'todos' */}
{todos.map(({ id }) => (<li key={id}>{id}</li>))}
</ol>
)
const connected = connect(mapStateToProps)(TodoApp)
export { connected as TodoApp }
The same thing happens if I change the arrow function to start like props => { const { todos } = props; ..., or even props => { const todos = props.todos; ....
Yep. 馃槄
It's been on my radar for a while, but hasn't come up in practice so it hasn't been a priority.
@benmosher I suspect adding the following line after this line would fix it. Would you agree?
if (declaredScope(context, dereference.object.name) !== 'module') return
Issue recreated here:
https://github.com/penx/eslint-plugin-import-bug
import * as color from './color';
export const getBackgroundFromColor = (color) => color.bg;
export const getExampleColor = () => color.example
'bg' not found in imported namespace 'color'. eslintimport/namespace
Thanks to @penx's repro and @isiahmeadows's suggested fix, I've got a fix ready for this :-)
Most helpful comment
Thanks to @penx's repro and @isiahmeadows's suggested fix, I've got a fix ready for this :-)