From 2442df893da2e338f29a9c095164168d894097d9 Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Sun, 23 Feb 2014 20:34:38 -0800 Subject: [PATCH] allow newDoclet event handlers to modify doclets (#584) --- lib/jsdoc/src/handlers.js | 4 ++-- test/specs/jsdoc/src/parser.js | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/lib/jsdoc/src/handlers.js b/lib/jsdoc/src/handlers.js index 4bd2eacc..5ae237f6 100644 --- a/lib/jsdoc/src/handlers.js +++ b/lib/jsdoc/src/handlers.js @@ -190,8 +190,8 @@ exports.attachTo = function(parser) { e = { doclet: newDoclet }; parser.emit('newDoclet', e); - if ( !e.defaultPrevented && !filter(newDoclet) ) { - parser.addResult(newDoclet); + if ( !e.defaultPrevented && !filter(e.doclet) ) { + parser.addResult(e.doclet); } } } diff --git a/test/specs/jsdoc/src/parser.js b/test/specs/jsdoc/src/parser.js index 0267a3a1..099be99f 100644 --- a/test/specs/jsdoc/src/parser.js +++ b/test/specs/jsdoc/src/parser.js @@ -126,6 +126,31 @@ describe("jsdoc/src/parser", function() { expect(spy).toHaveBeenCalled(); }); + it('should fire "newDoclet" events after creating a new doclet', function() { + var spy = jasmine.createSpy(); + var sourceCode = 'javascript:var foo = 1'; + parser.on('symbolFound', spy).parse(sourceCode); + expect(spy).toHaveBeenCalled(); + }); + + it('should allow "newDoclet" handlers to modify doclets', function() { + var results; + + var sourceCode = 'javascript:/** @class */function Foo() {}'; + + function handler(e) { + var doop = require('jsdoc/util/doop'); + e.doclet = doop(e.doclet); + e.doclet.foo = 'bar'; + } + + require('jsdoc/src/handlers').attachTo(parser); + parser.on('newDoclet', handler).parse(sourceCode); + results = parser.results(); + + expect(results[0].foo).toBe('bar'); + }); + it('should call AST node visitors', function() { var Syntax = require('jsdoc/src/syntax').Syntax;