Browse Source

Linting fixes
* Extracted the linting process into a separate task that gets called
* modified to use the library version of TSLint instead of the cli so that it can lint ALL the files and report the errors
* added a parameter to the task to have it abort the build if there are lint errors or not. Currently they just log to the console but do not abort the build

Shaddock Heath 10 years ago
parent
commit
df3931f348
1 changed files with 48 additions and 9 deletions
  1. 48 9
      Build/Scripts/BuildCommon.js

+ 48 - 9
Build/Scripts/BuildCommon.js

@@ -5,8 +5,49 @@ var host = require("./Host");
 var atomicRoot = host.atomicRoot;
 var glob = require('glob');
 
+var Tslint = require("tslint");
+
 namespace('build', function() {
 
+  // Linting task
+  task('lint_typescript', {
+      async: true
+  }, function(fileMask, failOnError) {
+
+    console.log("TSLINT: Linting files in " + fileMask);
+    var lintConfig = JSON.parse(fs.readFileSync("./Script/tslint.json"));
+    var options = {
+        configuration: lintConfig,
+        formatter: "prose"
+    };
+
+    // lint
+    // Since TSLint does not yet support recursively searching for files, then we need to
+    // create a command per file.  The main issue with this is that it will abort on the first error instead
+    // of listing out all lint errors
+    glob(fileMask, function(err, results) {
+      var lintErrors = [];
+      results.forEach(function(filename) {
+
+        var contents = fs.readFileSync(filename, "utf8");
+
+        var ll = new Tslint(filename, contents, options);
+        var result = ll.lint();
+        if (result.failureCount > 0) {
+            lintErrors.push(result.output);
+        }
+      });
+      if (lintErrors.length > 0) {
+          console.warn("TSLINT: WARNING - Lint errors detected");
+          console.warn(lintErrors.join(''));
+          if (failOnError) {
+              fail("TSLint errors detected");
+          }
+      }
+      complete();
+    });
+  });
+
   task('genscripts', {
     async: true
   }, function(platform) {
@@ -40,23 +81,21 @@ namespace('build', function() {
           // compile
           cmds.push(node + " " + tsc + " -p ./Script");
 
-          // lint
-          // Since TSLint does not yet support recursively searching for files, then we need to
-          // create a command per file.  The main issue with this is that it will abort on the first error instead
-          // of listing out all lint errors
-          glob("./Script/AtomicEditor/**/*.ts", function(err, results) {
-            results.forEach(function(file) {
-              cmds.push(node + " " + tslint + " -c ./Script/tslint.json " + file);
-            });
+          var lintTask = jake.Task['build:lint_typescript'];
 
+          lintTask.addListener('complete', function () {
+            console.log("\n\nLint: Typescript linting complete.\n\n");
             jake.exec(cmds, function() {
 
-              complete();
+               complete();
 
             }, {
               printStdout: true
             });
           });
+
+          lintTask.invoke("./Script/AtomicEditor/**/*.ts", false);
+
         } else {
             throw new Error("Node not configured for this platform: " + os.platform());
         }