Navigation Menu

Skip to content

Commit

Permalink
add .tslint (#1477)
Browse files Browse the repository at this point in the history
DEV

This PR is about #1402 
I wrote a custom tslintClass that prevent directly importing files from ``@tensorflow/tfjs-core/dist``
  • Loading branch information
WenheLI authored and dsmilkov committed Jul 22, 2019
1 parent 89a8fc2 commit f5f68f4
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 1 deletion.
44 changes: 44 additions & 0 deletions .tslint/noImportsFromDistRule.js
@@ -0,0 +1,44 @@
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
exports.__esModule = true;
var Lint = require("tslint");
var Rule = /** @class */ (function (_super) {
__extends(Rule, _super);
function Rule() {
return _super !== null && _super.apply(this, arguments) || this;
}
Rule.prototype.apply = function (sourceFile) {
return this.applyWithWalker(new NoImportsFromDistWalker(sourceFile, this.getOptions()));
};
Rule.FAILURE_STRING = "importing from dist/ is prohibited. Please use public API";
return Rule;
}(Lint.Rules.AbstractRule));
exports.Rule = Rule;
var NoImportsFromDistWalker = /** @class */ (function (_super) {
__extends(NoImportsFromDistWalker, _super);
function NoImportsFromDistWalker() {
return _super !== null && _super.apply(this, arguments) || this;
}
NoImportsFromDistWalker.prototype.visitImportDeclaration = function (node) {
var importFrom = node.moduleSpecifier.getText();
var reg = /@tensorflow\/tfjs[-a-z]*\/dist/;
if (importFrom.match(reg)) {
var fix = new Lint.Replacement(node.moduleSpecifier.getStart(), node.moduleSpecifier.getWidth(), importFrom.replace(/\/dist[\/]*/, ''));
this.addFailure(this.createFailure(node.moduleSpecifier.getStart(), node.moduleSpecifier.getWidth(), Rule.FAILURE_STRING, fix));
}
_super.prototype.visitImportDeclaration.call(this, node);
};
return NoImportsFromDistWalker;
}(Lint.RuleWalker));
30 changes: 30 additions & 0 deletions .tslint/noImportsFromDistRule.ts
@@ -0,0 +1,30 @@
import * as Lint from "tslint";
import * as ts from "typescript";

export class Rule extends Lint.Rules.AbstractRule {
public static FAILURE_STRING = "importing from dist/ is prohibited. Please use public API";

public apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
return this.applyWithWalker(
new NoImportsFromDistWalker(sourceFile, this.getOptions()));
}
}

class NoImportsFromDistWalker extends Lint.RuleWalker {
public visitImportDeclaration(node: ts.ImportDeclaration) {
const importFrom = node.moduleSpecifier.getText();
const reg = /@tensorflow\/tfjs[-a-z]*\/dist/;
if (importFrom.match(reg)) {
const fix = new Lint.Replacement(node.moduleSpecifier.getStart(),
node.moduleSpecifier.getWidth(),
importFrom.replace(/\/dist[\/]*/, ''));

this.addFailure(this.createFailure(node.moduleSpecifier.getStart(),
node.moduleSpecifier.getWidth(),
Rule.FAILURE_STRING, fix));
}

super.visitImportDeclaration(node);
}

}
3 changes: 2 additions & 1 deletion integration_tests/models/common.ts
Expand Up @@ -16,7 +16,8 @@
* =============================================================================
*/
import * as tfconverter from '@tensorflow/tfjs-converter';
import {NamedTensorMap} from '@tensorflow/tfjs-converter/dist/src/data/types';
// tslint:disable-next-line: no-imports-from-dist
import {NamedTensorMap} from '@tensorflow/tfjs-core';
import * as tfc from '@tensorflow/tfjs-core';
import * as tfl from '@tensorflow/tfjs-layers';
import * as detectBrowser from 'detect-browser';
Expand Down
1 change: 1 addition & 0 deletions integration_tests/run_node_tests.ts
Expand Up @@ -15,6 +15,7 @@
* =============================================================================
*/

// tslint:disable-next-line: no-imports-from-dist
import * as jasmineUtil from '@tensorflow/tfjs-core/dist/jasmine_util';
import * as fs from 'fs';

Expand Down
2 changes: 2 additions & 0 deletions tslint.json
@@ -1,4 +1,5 @@
{
"rulesDirectory": ".tslint",
"rules": {
"array-type": [true, "array-simple"],
"arrow-return-shorthand": true,
Expand Down Expand Up @@ -32,6 +33,7 @@
"no-consecutive-blank-lines": true,
"no-debugger": true,
"no-default-export": true,
"no-imports-from-dist": true,
"no-inferrable-types": true,
"no-namespace": [true, "allow-declarations"],
"no-reference": true,
Expand Down

0 comments on commit f5f68f4

Please sign in to comment.