quotemarkRule.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. "use strict";
  2. var __extends = (this && this.__extends) || function (d, b) {
  3. for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
  4. function __() { this.constructor = d; }
  5. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  6. };
  7. var Lint = require("../lint");
  8. var QuoteMark;
  9. (function (QuoteMark) {
  10. QuoteMark[QuoteMark["SINGLE_QUOTES"] = 0] = "SINGLE_QUOTES";
  11. QuoteMark[QuoteMark["DOUBLE_QUOTES"] = 1] = "DOUBLE_QUOTES";
  12. })(QuoteMark || (QuoteMark = {}));
  13. var Rule = (function (_super) {
  14. __extends(Rule, _super);
  15. function Rule() {
  16. _super.apply(this, arguments);
  17. }
  18. Rule.prototype.isEnabled = function () {
  19. if (_super.prototype.isEnabled.call(this)) {
  20. var quoteMarkString = this.getOptions().ruleArguments[0];
  21. return (quoteMarkString === "single" || quoteMarkString === "double");
  22. }
  23. return false;
  24. };
  25. Rule.prototype.apply = function (sourceFile) {
  26. return this.applyWithWalker(new QuotemarkWalker(sourceFile, this.getOptions()));
  27. };
  28. Rule.SINGLE_QUOTE_FAILURE = "\" should be '";
  29. Rule.DOUBLE_QUOTE_FAILURE = "' should be \"";
  30. return Rule;
  31. }(Lint.Rules.AbstractRule));
  32. exports.Rule = Rule;
  33. var QuotemarkWalker = (function (_super) {
  34. __extends(QuotemarkWalker, _super);
  35. function QuotemarkWalker(sourceFile, options) {
  36. _super.call(this, sourceFile, options);
  37. this.quoteMark = QuoteMark.DOUBLE_QUOTES;
  38. var ruleArguments = this.getOptions();
  39. var quoteMarkString = ruleArguments[0];
  40. if (quoteMarkString === "single") {
  41. this.quoteMark = QuoteMark.SINGLE_QUOTES;
  42. }
  43. else {
  44. this.quoteMark = QuoteMark.DOUBLE_QUOTES;
  45. }
  46. this.avoidEscape = ruleArguments.indexOf("avoid-escape") > 0;
  47. }
  48. QuotemarkWalker.prototype.visitStringLiteral = function (node) {
  49. var text = node.getText();
  50. var width = node.getWidth();
  51. var position = node.getStart();
  52. var firstCharacter = text.charAt(0);
  53. var lastCharacter = text.charAt(text.length - 1);
  54. var expectedQuoteMark = (this.quoteMark === QuoteMark.SINGLE_QUOTES) ? "'" : "\"";
  55. if (firstCharacter !== expectedQuoteMark || lastCharacter !== expectedQuoteMark) {
  56. var includesOtherQuoteMark = text.slice(1, -1).indexOf(expectedQuoteMark) !== -1;
  57. if (!(this.avoidEscape && includesOtherQuoteMark)) {
  58. var failureMessage = (this.quoteMark === QuoteMark.SINGLE_QUOTES)
  59. ? Rule.SINGLE_QUOTE_FAILURE
  60. : Rule.DOUBLE_QUOTE_FAILURE;
  61. this.addFailure(this.createFailure(position, width, failureMessage));
  62. }
  63. }
  64. _super.prototype.visitStringLiteral.call(this, node);
  65. };
  66. return QuotemarkWalker;
  67. }(Lint.RuleWalker));