BuildLint.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. var fs = require('fs-extra');
  2. var path = require("path");
  3. var os = require('os');
  4. var glob = require("glob");
  5. var config = require("./BuildConfig");
  6. var fixTabs = false;
  7. var atomicRoot = config.atomicRoot;
  8. // Oh, JavaScript
  9. atomicRoot = atomicRoot.split("\\");
  10. atomicRoot = atomicRoot.join("/");
  11. function lintFile(filename) {
  12. var file = fs.readFileSync(filename, "utf-8");
  13. if (file.indexOf('\t') != -1) {
  14. console.log(filename + " contains tab character");
  15. if (fixTabs) {
  16. var fd = fs.openSync(filename, "w");
  17. var tabbed = file.split('\t');
  18. file = tabbed.join(" ");
  19. fs.writeSync(fd, file);
  20. fs.closeSync(fd);
  21. }
  22. }
  23. }
  24. namespace('build', function() {
  25. task('lint', {
  26. async: true
  27. }, function() {
  28. // I looked into options and there are many for C# and C++, though simply want to catch tabs/spaces right now
  29. // and not introduce a dependency, soooooo
  30. pattern = [ atomicRoot + "Source/**/*.cpp",
  31. atomicRoot + "Source/**/*.h",
  32. atomicRoot + "Script/AtomicNET/**/*.cs"
  33. ];
  34. pattern = "{" + pattern.join(",") + "}";
  35. // I failed at figure out glob exclusion patterns
  36. exclude = [atomicRoot + "Source/ThirdParty/",
  37. atomicRoot + "Source/ToolCore/JSBind/cplusplus/"];
  38. var filenames = glob.sync(pattern);
  39. for (var i = 0; i < filenames.length; i++) {
  40. var filename = filenames[i];
  41. var skip = false;
  42. for (var j = 0; j < exclude.length; j++) {
  43. if (filename.startsWith(exclude[j])) {
  44. skip = true;
  45. break;
  46. }
  47. }
  48. if (skip)
  49. continue;
  50. lintFile(filename);
  51. }
  52. process.exit(0);
  53. complete();
  54. });
  55. }); // end of build namespace