aboutsummaryrefslogtreecommitdiff
path: root/node_modules/tslint/lib/ruleLoader.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/tslint/lib/ruleLoader.js')
-rw-r--r--node_modules/tslint/lib/ruleLoader.js20
1 files changed, 17 insertions, 3 deletions
diff --git a/node_modules/tslint/lib/ruleLoader.js b/node_modules/tslint/lib/ruleLoader.js
index acc7a3881..152f7b641 100644
--- a/node_modules/tslint/lib/ruleLoader.js
+++ b/node_modules/tslint/lib/ruleLoader.js
@@ -91,15 +91,29 @@ function transformName(name) {
* @param ruleName - A name of a rule in filename format. ex) "someLintRule"
*/
function loadRule(directory, ruleName) {
- var fullPath = path.join(directory, ruleName);
- if (fs.existsSync(fullPath + ".js")) {
- var ruleModule = require(fullPath);
+ var ruleFullPath = getRuleFullPath(directory, ruleName);
+ if (ruleFullPath !== undefined) {
+ var ruleModule = require(ruleFullPath);
if (ruleModule !== undefined) {
return ruleModule.Rule;
}
}
return "not-found";
}
+/**
+ * Returns the full path to a rule file. Path to rules are resolved using nodes path resolution.
+ * This allows developers to write custom rules in TypeScript, which then can be loaded by TS-Node.
+ * @param directory - An absolute path to a directory of rules
+ * @param ruleName - A name of a rule in filename format. ex) "someLintRule"
+ */
+function getRuleFullPath(directory, ruleName) {
+ try {
+ return require.resolve(path.join(directory, ruleName));
+ }
+ catch (e) {
+ return undefined;
+ }
+}
function loadCachedRule(directory, ruleName, isCustomPath) {
// use cached value if available
var fullPath = path.join(directory, ruleName);