allow Visitor instances to be created before Parser instances (#923)

This commit is contained in:
Jeff Williams 2015-02-17 16:00:26 -08:00
parent 17715c8434
commit ea773af2ed
4 changed files with 19 additions and 6 deletions

View File

@ -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() {

View File

@ -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);

View File

@ -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 = [];

View File

@ -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);