From 461bc2c8ac5d23fe12eee90fd96a6e264b2d4675 Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Fri, 9 Nov 2012 09:27:09 -0800 Subject: [PATCH] DRY out error constructors, plus a couple of small fixes - error messages won't end with '\nundefined' if meta.comment is missing - better prototypal inheritance --- rhino_modules/jsdoc/tag/validator.js | 25 +++++++++++++++++++------ rhino_modules/jsdoc/util/error.js | 2 +- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/rhino_modules/jsdoc/tag/validator.js b/rhino_modules/jsdoc/tag/validator.js index a21a7a10..6575eab7 100644 --- a/rhino_modules/jsdoc/tag/validator.js +++ b/rhino_modules/jsdoc/tag/validator.js @@ -9,24 +9,37 @@ var dictionary = require('jsdoc/tag/dictionary'); +var format = require('util').format; + +function buildMessage(tagName, meta, desc) { + var result = format('The @%s tag %s. File: %s, line: %s', tagName, desc, meta.filename, + meta.lineno); + if (meta.comment) { + result += '\n' + meta.comment; + } + return result; +} function UnknownTagError(tagName, meta) { this.name = 'UnknownTagError'; - this.message = 'The @' + tagName + ' tag is not a known tag. File: ' + meta.filename + ', Line: ' + meta.lineno + '\n' + meta.comment; + this.message = buildMessage(tagName, meta, 'is not a known tag'); } -UnknownTagError.prototype = Error.prototype; +UnknownTagError.prototype = new Error(); +UnknownTagError.prototype.constructor = UnknownTagError; function TagValueRequiredError(tagName, meta) { this.name = 'TagValueRequiredError'; - this.message = 'The @' + tagName + ' tag requires a value. File: ' + meta.filename + ', Line: ' + meta.lineno + '\n' + meta.comment; + this.message = buildMessage(tagName, meta, 'requires a value'); } -TagValueRequiredError.prototype = Error.prototype; +TagValueRequiredError.prototype = new Error(); +TagValueRequiredError.prototype.constructor = TagValueRequiredError; function TagValueNotPermittedError(tagName, meta) { this.name = 'TagValueNotPermittedError'; - this.message = 'The @' + tagName + ' tag does not permit a value. File: ' + meta.filename + ', Line: ' + meta.lineno + '\n' + meta.comment; + this.message = buildMessage(tagName, meta, 'does not permit a value'); } -TagValueNotPermittedError.prototype = Error.prototype; +TagValueNotPermittedError.prototype = new Error(); +TagValueNotPermittedError.prototype.constructor = TagValueNotPermittedError; /** Validate the given tag. diff --git a/rhino_modules/jsdoc/util/error.js b/rhino_modules/jsdoc/util/error.js index 28e7d112..57d950b3 100644 --- a/rhino_modules/jsdoc/util/error.js +++ b/rhino_modules/jsdoc/util/error.js @@ -21,7 +21,7 @@ exports.handle = function(e) { // include the error type if it's an Error object if (e instanceof Error) { - msg = e.constructor.name + ": " + msg; + msg = e.name + ': ' + msg; } console.log(msg);