From ea773af2edb14128e768f8e7059498301d78a1c2 Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Tue, 17 Feb 2015 16:00:26 -0800 Subject: [PATCH] allow Visitor instances to be created before Parser instances (#923) --- lib/jsdoc/src/parser.js | 4 +++- lib/jsdoc/src/visitor.js | 13 +++++++++++-- rhino/jsdoc/src/visitor.js | 4 ++-- test/specs/jsdoc/src/parser.js | 4 +++- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/jsdoc/src/parser.js b/lib/jsdoc/src/parser.js index b841770d..917c98b0 100644 --- a/lib/jsdoc/src/parser.js +++ b/lib/jsdoc/src/parser.js @@ -70,9 +70,11 @@ var Parser = exports.Parser = function(builderInstance, visitorInstance, walkerI this.clear(); this._astBuilder = builderInstance || new (require('jsdoc/src/astbuilder')).AstBuilder(); - this._visitor = visitorInstance || new (require('jsdoc/src/visitor')).Visitor(this); + this._visitor = visitorInstance || new (require('jsdoc/src/visitor')).Visitor(); this._walker = walkerInstance || new (require('jsdoc/src/walker')).Walker(); + this._visitor.setParser(this); + Object.defineProperties(this, { astBuilder: { get: function() { diff --git a/lib/jsdoc/src/visitor.js b/lib/jsdoc/src/visitor.js index c7edebe0..65a9799c 100644 --- a/lib/jsdoc/src/visitor.js +++ b/lib/jsdoc/src/visitor.js @@ -143,8 +143,8 @@ function JsdocCommentFound(comment, filename) { } // TODO: docs -var Visitor = exports.Visitor = function(parser) { - this._parser = parser; +var Visitor = exports.Visitor = function() { + this._parser = null; // Mozilla Parser API node visitors added by plugins this._nodeVisitors = []; @@ -155,6 +155,15 @@ var Visitor = exports.Visitor = function(parser) { ]; }; +/** + * Set the parser instance that visitors can use. + * + * @param {module:jsdoc/src/parser.Parser} parser - The parser instance. + */ +Visitor.prototype.setParser = function(parser) { + this._parser = parser; +}; + // TODO: docs Visitor.prototype.addAstNodeVisitor = function(visitor) { this._nodeVisitors.push(visitor); diff --git a/rhino/jsdoc/src/visitor.js b/rhino/jsdoc/src/visitor.js index 783c17a6..4be5c70f 100644 --- a/rhino/jsdoc/src/visitor.js +++ b/rhino/jsdoc/src/visitor.js @@ -2,13 +2,13 @@ 'use strict'; // TODO: docs -var Visitor = exports.Visitor = function(parser) { +var Visitor = exports.Visitor = function() { var runtime = require('jsdoc/util/runtime'); if ( !runtime.isRhino() ) { throw new Error('You must run JSDoc on Mozilla Rhino to use the Rhino node visitor.'); } - Visitor.super_.call(this, parser); + Visitor.super_.call(this); // Rhino node visitors added by plugins (deprecated in JSDoc 3.3) this._rhinoNodeVisitors = []; diff --git a/test/specs/jsdoc/src/parser.js b/test/specs/jsdoc/src/parser.js index d53979eb..2dbc5e63 100644 --- a/test/specs/jsdoc/src/parser.js +++ b/test/specs/jsdoc/src/parser.js @@ -44,7 +44,9 @@ describe('jsdoc/src/parser', function() { it('should accept an astBuilder, visitor, and walker as arguments', function() { var astBuilder = {}; - var visitor = {}; + var visitor = { + setParser: function() {} + }; var walker = {}; var myParser = new jsdoc.src.parser.Parser(astBuilder, visitor, walker);