Skip to content

Commit 875485c

Browse files
committed
no-context: capture class static properties
1 parent 6ee7bb2 commit 875485c

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed

lib/rules/no-context.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,20 @@ module.exports = {
109109
}
110110
},
111111

112+
ObjectExpression: function(node) {
113+
node.properties.forEach(function(property) {
114+
if (!isContextTypesDeclaration(property.key)) {
115+
return;
116+
}
117+
if (property.value.type === 'ObjectExpression') {
118+
context.report({
119+
node: node,
120+
message: 'Using context is not allowed.'
121+
});
122+
}
123+
});
124+
},
125+
112126
FunctionDeclaration: handleStatelessComponent,
113127

114128
ArrowFunctionExpression: handleStatelessComponent,

tests/lib/rules/no-context.js

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ ruleTester.run('no-context', rule, {
3434
'});'
3535
].join('\n'),
3636
parserOptions: parserOptions
37+
}, {
38+
code: [
39+
'var Hello = React.createClass({',
40+
' propTypes: {',
41+
' name: React.PropTypes.string',
42+
' },',
43+
' render: function() {',
44+
' return <div>Hello {this.props.name}</div>;',
45+
' }',
46+
'});'
47+
].join('\n'),
48+
parserOptions: parserOptions
3749
}, {
3850
code: [
3951
'var Hello = function() {',
@@ -42,6 +54,41 @@ ruleTester.run('no-context', rule, {
4254
'};'
4355
].join('\n'),
4456
parserOptions: parserOptions
57+
}, {
58+
code: [
59+
'class Hello extends React.Component {',
60+
' static propTypes = {',
61+
' name: React.PropTypes.string',
62+
' };',
63+
' render() {',
64+
' return <div>Hello {this.props.name}</div>;',
65+
' }',
66+
'};'
67+
].join('\n'),
68+
parser: 'babel-eslint',
69+
parserOptions: parserOptions
70+
}, {
71+
code: [
72+
'class Hello extends React.Component {',
73+
' render() {',
74+
' return <div>Hello {this.props.name}</div>;',
75+
' }',
76+
'};',
77+
'Hello.propTypes = {',
78+
' name: React.PropTypes.string',
79+
'};'
80+
].join('\n'),
81+
parserOptions: parserOptions
82+
}, {
83+
code: [
84+
'var First = React.createClass({',
85+
' propTypes: externalPropTypes,',
86+
' render: function() {',
87+
' return <div />;',
88+
' }',
89+
'});'
90+
].join('\n'),
91+
parserOptions: parserOptions
4592
}],
4693

4794
invalid: [{
@@ -56,6 +103,23 @@ ruleTester.run('no-context', rule, {
56103
errors: [{
57104
message: 'Using context is not allowed.'
58105
}]
106+
}, {
107+
code: [
108+
'var Hello = React.createClass({',
109+
' contextTypes: {',
110+
' name: React.PropTypes.string',
111+
' },',
112+
' render: function() {',
113+
' return <div>Hello {this.context.name}</div>;',
114+
' }',
115+
'});'
116+
].join('\n'),
117+
parserOptions: parserOptions,
118+
errors: [{
119+
message: 'Using context is not allowed.'
120+
}, {
121+
message: 'Using context is not allowed.'
122+
}]
59123
}, {
60124
code: [
61125
'class Hello extends React.Component {',
@@ -83,6 +147,22 @@ ruleTester.run('no-context', rule, {
83147
errors: [{
84148
message: 'Using context is not allowed.'
85149
}]
150+
}, {
151+
code: [
152+
'class Hello extends React.Component {',
153+
' static contextTypes = {',
154+
' name: React.PropTypes.string',
155+
' };',
156+
' render() {',
157+
' return <div>Hello</div>;',
158+
' }',
159+
'};'
160+
].join('\n'),
161+
parser: 'babel-eslint',
162+
parserOptions: parserOptions,
163+
errors: [{
164+
message: 'Using context is not allowed.'
165+
}]
86166
}, {
87167
code: [
88168
'class Hello extends React.Component {',

0 commit comments

Comments
 (0)