forked from eslint/eslint
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New: no-restricted-properties rule (fixes eslint#3218)
- Loading branch information
Showing
5 changed files
with
181 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
# Restrict specified properties (no-restricted-properties) | ||
|
||
Certain properties on objects may be disallowed in a codebase. This is useful for deprecating an API or restricting usage of a module's methods. This rule looks for accessing a given property key on a given object name, either when reading the property's value or invoking it as a function. You may specify an optional message to indicate an alternative API or a reason for the restriction. | ||
|
||
## Rule Details | ||
|
||
This rule is aimed at disallowing certain object properties from your code. | ||
|
||
### Options | ||
|
||
This rule takes a list of objects, where the object name and property names are specified: | ||
|
||
```json | ||
{ | ||
"rules": { | ||
"no-restricted-properties": [2, { | ||
"object": "disallowedObjectName", | ||
"property": "disallowedPropertyName" | ||
}] | ||
} | ||
} | ||
``` | ||
|
||
Multiple object/property values can be disallowed, and you can specify an optional message: | ||
|
||
```json | ||
{ | ||
"rules": { | ||
"no-restricted-properties": [2, { | ||
"object": "disallowedObjectName", | ||
"property": "disallowedPropertyName" | ||
}, { | ||
"object": "anotherDisallowedObjectName", | ||
"property": "anotherDisallowedPropertyName", | ||
"message": "anotherDisallowedObjectName.anotherDisallowedPropertyName is deprecated in favor of anotherDisallowedObjectName.newPropertyName" | ||
}] | ||
} | ||
} | ||
``` | ||
|
||
The following patterns are considered problems: | ||
|
||
```js | ||
/* eslint no-restricted-properties: [2, { | ||
"object": "disallowedObjectName", | ||
"property": "disallowedPropertyName" | ||
}] */ | ||
|
||
var example = disallowedObjectName.disallowedPropertyName; /*error Disallowed object property: disallowedObjectName.disallowedPropertyName.*/ | ||
|
||
disallowedObjectName.disallowedPropertyName(); /*error Disallowed object property: disallowedObjectName.disallowedPropertyName.*/ | ||
``` | ||
|
||
The following patterns are not considered problems: | ||
|
||
```js | ||
/* eslint no-restricted-properties: [2, { | ||
"object": "disallowedObjectName", | ||
"property": "disallowedPropertyName" | ||
}] */ | ||
|
||
var example = disallowedObjectName.somePropertyName; | ||
|
||
someObjectName.disallowedPropertyName(); | ||
``` | ||
|
||
## When Not To Use It | ||
|
||
If you don't have any object/property combinations to restrict, you should not use this rule. | ||
|
||
## Related Rules | ||
|
||
* [no-restricted-syntax](no-restricted-syntax.md) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/** | ||
* @fileoverview Rule to disallow specified object methods | ||
* @author Will Klein | ||
* @copyright 2015 Will Klein. All rights reserved. | ||
*/ | ||
|
||
"use strict"; | ||
|
||
//------------------------------------------------------------------------------ | ||
// Rule Definition | ||
//------------------------------------------------------------------------------ | ||
|
||
module.exports = function(context) { | ||
var restrictedProperties = context.options[0]; | ||
|
||
return { | ||
"MemberExpression": function(node) { | ||
restrictedProperties.forEach(function(restrictedProperty) { | ||
var objectName = node.object && node.object.name; | ||
var propertyName = node.property && node.property.name; | ||
|
||
if (objectName === restrictedProperty.object && | ||
propertyName === restrictedProperty.property) { | ||
context.report(node, "Using " + restrictedProperty.object + "." + restrictedProperty.property + " is disallowed"); | ||
} | ||
}); | ||
} | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/** | ||
* @fileoverview Tests for no-restricted-properties rule. | ||
* @author Will Klein | ||
* @copyright 2015 Will Klein. All rights reserved. | ||
*/ | ||
|
||
"use strict"; | ||
|
||
//------------------------------------------------------------------------------ | ||
// Requirements | ||
//------------------------------------------------------------------------------ | ||
|
||
var rule = require("../../../lib/rules/no-restricted-properties"); | ||
var RuleTester = require("../../../lib/testers/rule-tester"); | ||
|
||
var ruleTester = new RuleTester(); | ||
ruleTester.run("no-restricted-properties", rule, { | ||
valid: [ | ||
{ | ||
code: "someObject.someProperty", | ||
options: [[{ | ||
object: "someObject", | ||
property: "disallowedProperty" | ||
}]] | ||
}, { | ||
code: "anotherObject.disallowedProperty", | ||
options: [[{ | ||
object: "someObject", | ||
property: "disallowedProperty" | ||
}]] | ||
}, { | ||
code: "someObject.someProperty()", | ||
options: [[{ | ||
object: "someObject", | ||
property: "disallowedProperty" | ||
}]] | ||
}, { | ||
code: "anotherObject.disallowedProperty()", | ||
options: [[{ | ||
object: "someObject", | ||
property: "disallowedProperty" | ||
}]] | ||
} | ||
], | ||
|
||
invalid: [ | ||
{ | ||
code: "someObject.disallowedProperty", | ||
options: [[{ | ||
object: "someObject", | ||
property: "disallowedProperty" | ||
}]], | ||
errors: [{ | ||
message: "Using someObject.disallowedProperty is disallowed", | ||
type: "MemberExpression" | ||
}] | ||
}, { | ||
code: "someObject.disallowedProperty; anotherObject.anotherDisallowedProperty()", | ||
options: [[{ | ||
object: "someObject", | ||
property: "disallowedProperty" | ||
}, { | ||
object: "anotherObject", | ||
property: "anotherDisallowedProperty" | ||
}]], | ||
errors: [{ | ||
message: "Using someObject.disallowedProperty is disallowed", | ||
type: "MemberExpression" | ||
}, { | ||
message: "Using anotherObject.anotherDisallowedProperty is disallowed", | ||
type: "MemberExpression" | ||
}] | ||
} | ||
] | ||
}); |