UNPKG

42.7 kBMarkdownView Raw
1# JSDoc 3 change history
2
3This file describes notable changes in each version of JSDoc 3.
4
5
6## 3.6.0 (May 2019)
7
8### Major changes
9
10+ JSDoc is now compatible with Node.js 12.
11+ JSDoc now recognizes all documented Closure Compiler tags. ([#605][605])
12
13### Enhancements
14
15+ You can now use the `templates.useShortNamesInLinks` configuration setting to show the short name
16of each symbol in link text (for example, `baz`), rather than the full longname (for example,
17`foo.bar.baz`). ([#738][738])
18+ When you enable the Markdown plugin, you can now specify a function that performs syntax
19highlighting in code blocks. ([#1412][1412])
20+ The default template now places namespaces near the top of the TOC. ([#1410][1410])
21
22### Bug fixes
23
24+ When you add a JSDoc comment to an ES2015 constructor, JSDoc now preserves all of the JSDoc tags,
25not only the description and parameters. ([#1129][1129])
26+ The `@exports` tag now works correctly when it is combined with the `@enum` tag. ([#970][970])
27+ When you enable the Markdown plugin, and you use a code fence with the language set to `plain`,
28JSDoc no longer pretty-prints the code block in the generated documentation. ([#1361][1361])
29
30
31## 3.5.5 (September 2017)
32
33Fixes a compatibility issue with Node.js 8.5.0. (#1438)
34
35
36## 3.5.4 (August 2017)
37
38+ When a class uses the `@hideconstructor` tag, the default template no longer displays the names of
39parameters that the constructor accepts. (#1397)
40+ When an arrow function expression returns a class, the class's methods and properties are now
41named correctly. (#1409)
42+ JSDoc no longer crashes when an anonymous class is passed as a function parameter. (#1416)
43+ JSDoc now allows `import` and `export` declarations anywhere where a statement is allowed. (#1411)
44+ JSDoc now allows `return` statements outside of functions. (#1411)
45+ JSDoc now allows `super()` calls outside of a method definition. (#1411)
46+ JSDoc no longer exits before the `STDOUT` pipe has been flushed. (#1408)
47
48
49## 3.5.3 (July 2017)
50
51+ Non-JSDoc comments (comments that do not begin with `/**`) are now ignored. (#1398)
52+ JSDoc no longer crashes when it parses a class property with no value assigned to it. (#1400)
53+ When there are JSDoc comments at the end of a source file that has a `'use strict';` directive,
54the comments are no longer ignored. (#1396)
55+ Namepaths that contain an `@` sign (for example, `module:@prefix/my-module~myCallback`) are now
56parsed correctly. (#1302)
57+ The default template now displays interfaces that belong to a namespace. (#1406)
58+ When an ES2015 class inside a module uses an `@alias` tag, the class's constructor now gets the
59correct longname. (#1395)
60+ When there are no input files to process, JSDoc no longer prints help text to the console. (#1404)
61
62
63## 3.5.2 (July 2017)
64
65+ The default template now hides parameters and properties for class constructors that are hidden
66with the `@hideconstructor` tag. (#1397)
67+ JSDoc now uses an improved algorithm for locating plugins and template resources. (#1394)
68+ When the `@alias` tag identifies an instance member (for example, `@alias Foo#bar`), the alias is
69now applied correctly. (#1385)
70+ When the `@alias` tag is applied to a class that is within a module and is aliased to the module
71name, the class's instance members are now documented correctly. (#1134)
72+ Fixed a crash when a `@param` tag uses the wrong delimiter to close the type expression (for
73example, `@param {Object)`). (#1221)
74+ The Markdown plugin now converts Markdown-formatted text in the `@summary` tag. (#1149)
75
76
77## 3.5.1 (July 2017)
78
79+ Fixed an issue that prevented JSDoc from working on versions of Node.js prior to 5.10.0. (#1393)
80+ If the JSDoc configuration file does not have a file extension, JSDoc now assumes that the file
81is in JSON format. (#1391)
82
83
84## 3.5.0 (July 2017)
85
86### Major changes
87
88+ JSDoc now uses the [Babylon](https://github.com/babel/babylon) JavaScript parser, which means that
89JSDoc can parse any JavaScript or JSX file that is supported by the [Babel](https://babeljs.io/)
90compiler. For example, JSDoc can now parse JavaScript files that include all of the following
91language features:
92
93 + [Decorators](https://github.com/tc39/proposal-decorators)
94 + [Public and private class fields](https://github.com/tc39/proposal-class-fields)
95 + [Asynchronous iterators](https://github.com/tc39/proposal-async-iteration)
96 + [Dynamic `import()`](https://github.com/tc39/proposal-dynamic-import)
97 + [Optional chaining](https://github.com/tc39/proposal-optional-chaining)
98
99+ You can now use a JavaScript file to configure JSDoc. The JavaScript file must be a CommonJS
100module that exports a single configuration object. See the
101[documentation](https://jsdoc.app/about-configuring-jsdoc.html) for details and examples.
102+ Fixed multiple issues with documenting ES2015 classes and modules. See "Bug fixes" for details.
103+ JSDoc now requires Node.js 4.2.0 or later.
104
105### New tags
106
107**Note**: Third-party templates may not support these new tags.
108
109+ You can now use the new [`@async` tag](https://jsdoc.app/tags-async.html) to indicate that a
110function is asynchronous (that is, that it was declared with the syntax `async function foo() {}`).
111In general, you do not need to use this tag, because JSDoc autodetects asynchronous functions.
112(#1188)
113+ You can now use the new [`@generator` tag](https://jsdoc.app/tags-generator.html) to indicate
114that a function is a generator function. In general, you do not need to use this tag, because JSDoc
115autodetects generator functions. (#1158)
116+ You can now use the new [`@hideconstructor` tag](https://jsdoc.app/tags-hideconstructor.html) to
117tell JSDoc to hide a class's constructor from the documentation. (#952)
118+ You can now use the new [`@package` tag](https://jsdoc.app/tags-package.html) to indicate that a
119symbol is package-private. (#962)
120+ You can now use the new [`@yields` tag](https://jsdoc.app/tags-yields.html) to document the
121value that is yielded by a generator function. (#1388)
122
123### Enhancements
124
125+ JSDoc can now parse files that contain asynchronous functions (that is, functions declared as
126`async function foo() {}`), and JSDoc autodetects when a function is asynchronous. (#1188)
127+ JSDoc now autodetects generator functions. (#1158)
128+ When JSDoc cannot parse a type expression, it now logs the line number on which the type
129expression was found. (#1057)
130+ When JSDoc fires `jsdocCommentFound` and `symbolFound` events, the event now includes a `columnno`
131property indicating the column number on which the comment or symbol was found. (#1362)
132+ You can now use the new `sourceType` configuration option to control how JavaScript files are
133parsed. The default value is `module`. Set the value to `script` to suppress implied strict mode;
134this setting will also prevent you from using ES2015 modules. (#1210)
135+ You can now use the new `recurseDepth` configuration option to control how many levels deep JSDoc
136will recursively search for files. The default value is 10. (#1340)
137
138### Bug fixes
139
140+ JSDoc now correctly documents the constructors and instance properties of ES2015 classes. (#1182)
141+ JSDoc now correctly documents the constructor of an ES2015 class exported from an ES2015 module.
142(#1272)
143+ JSDoc now uses the correct scope for exported symbols, and their children, in ES2015 modules.
144(#1293)
145+ When JSDoc is run in a directory that has a `plugins/` or `templates/` directory, JSDoc can now
146discover plugins and templates in other directories. (#1081, #1308)
147+ JSDoc no longer crashes when it reads a UTF-8 JSON file with a leading BOM. (#1256, #1297)
148+ When a function is assigned to a variable, JSDoc now autodetects the function's default and
149repeatable parameters. (#1054)
150+ JSDoc no longer crashes when the `@author` tag does not have a value. (#1289)
151+ JSDoc now always calls `process.exit()` when exiting. (#1287)
152
153### Default template
154
155+ The default template now identifies asynchronous and generator functions. (#1158, #1188)
156+ The default template now displays appropriate documentation for namespaces that are also
157functions. (#955)
158+ Images that are wider than the text area are now displayed correctly. (#1359)
159
160
161
162## 3.4.3 (November 2016)
163
164Updated JSDoc's `LICENSE.md` file.
165
166
167## 3.4.2 (October 2016)
168
169+ Classes exported from an ES2015 module are now documented correctly. (#1137)
170+ Fixed an issue that prevented plugins and templates from being loaded correctly. (#1259)
171+ Fixed a crash when using the experimental object spread operator in assignments. (#1258)
172
173
174## 3.4.1 (September 2016)
175
176### Enhancements
177
178+ When installing JSDoc from NPM, all dependencies are now pulled from NPM. (#961)
179+ The configuration setting `tags.allowUnknownTags` may now contain an array of tag names that
180should be allowed. (#1159)
181
182### Bug fixes
183
184+ When an ES2015 module's default export is a class, JSDoc now documents the class correctly.
185(#1113, #1120)
186+ JSDoc no longer crashes when an ES2015 module exports an anonymous class. (#1113)
187+ JSDoc no longer crashes when the experimental object spread operator is used. (#1141)
188+ In ES2015 methods, JSDoc now autodetects whether a parameter is a default or repeatable parameter.
189(#1144)
190+ The Markdown plugin now works correctly with inline tags that contain special characters, such as
191`{@link chat."#channel"}`. (#1035)
192+ When JSDoc is run in a directory that has a `plugins/` or `templates/` directory, JSDoc can now
193discover plugins and templates in other directories. (#1081)
194
195### Templates
196
197+ The default template now uses appropriate styles for displaying tables. (#1064)
198+ The default template's CSS file no longer uses the same style for both `<h2>` and `<h3>` elements.
199(#1108)
200+ JSDoc now includes a `silent` template that generates no output. This template makes it easier to
201use JSDoc as a linter to check for syntax errors and unrecognized tags in documentation comments.
202(#1160)
203
204
205## 3.4.0 (November 2015)
206
207### Major changes
208
209+ JSDoc is now compatible with Node.js 4.0.0 and later.
210+ JSDoc no longer runs on Mozilla Rhino. Use Node.js to run JSDoc.
211+ JSDoc can now parse ECMAScript 2015 code, including code that uses native classes and modules.
212(#555)
213+ JSDoc can now parse [JSX](https://facebook.github.io/jsx/) files. (#1001)
214+ JSDoc's `app` and `env` global variables are now deprecated. Avoid using the `app` global. Use the
215`jsdoc/env` module instead of the `env` global. (#812)
216
217### Enhancements
218
219+ `const` declarations are now automatically treated as constants. (#555)
220+ Templates may now run asynchronously. To create an asynchronous template, simply return a promise
221from your template's `publish` method. (#953)
222
223### Bug fixes
224
225+ Symbols now get the correct longname when they are defined as properties of a prototype and
226include special characters, such as `#` and `.` (for example, `Foo.prototype['this#is#bar']`).
227(#888)
228+ Instance members that are defined as computed properties of `this` (for example, `this['bar']`)
229now get the correct longname. (#890)
230+ When an instance member (for example, `this.bar`) is documented within a member of a prototype
231(for example, `Foo.prototype.setBar`), the instance member's longname is now set correctly. (#1011)
232+ The `@borrows` tag now works with symbol names that contain whitespace. (#818)
233
234### Plugins
235
236+ For the Markdown plugin, you can now autogenerate a heading ID for each heading by setting the
237configuration property `markdown.idInHeadings` to `true`. (#1032)
238
239### Template improvements
240
241+ In the default template, you can now show the full namepath of each object in the navigation
242column by setting the configuration property `templates.default.useLongnameInNav` to `true`. (#986)
243+ In the Haruki template, falsy default values now appear in the output. (#1063)
244
245
246## 3.3.3 (September 2015)
247
248+ Symbols named `prototype` are now handled correctly. (#891)
249+ Fixed an issue that could cause JSDoc to go into an infinite loop when a module is documented
250twice. (#975)
251+ Fixed an issue that could cause parsing errors on valid regular expressions. (#1053)
252
253
254## 3.3.2 (June 2015)
255
256JSDoc no longer crashes when parsing a large number of files, or a single object that has a large
257number of properties. (#976)
258
259
260## 3.3.1 (June 2015)
261
262+ Fixed a crash in the Haruki template. (#1005)
263+ When a type expression includes a record type with numeric keys (for example, `{0: string}`), the
264type expression is now parsed correctly. (#1016)
265
266
267## 3.3.0 (May 2015)
268
269### Major changes
270
271+ You can now run JSDoc on Node.js. (#93)
272+ You can now use the `@interface` and `@implements` tags to document interfaces and their
273implementations. (#720, #828)
274+ Closure Compiler's `@inheritDoc` and `@override` tags are now supported. (#53)
275+ If the JSDoc comment for a symbol includes the `@mixes` tag, all of the mixins now appear in the
276symbol's documentation. (#378)
277+ JSDoc can now log information to the console as it runs (for example, the name of each file that
278JSDoc parses). To log this information, run JSDoc with the `--verbose` flag. (#416)
279+ You can now use any file as the package or README file for your documentation. Use the
280`-P/--package/` and `-R/--readme` flags to specify the package and README file. (#708)
281+ The default template's typography and color scheme have been significantly improved. (#550, #780,
282#843)
283
284### Enhancements
285
286+ You can now use the `--pedantic` flag to treat all errors as fatal errors, and to treat warnings
287as errors. This flag replaces the `--lenient` flag, which had roughly the opposite meaning and is no
288longer available. (#416)
289+ You can now use the `-a/--access` flag to control whether private, protected, and public symbols
290appear in the documentation. (#860, #861)
291+ You can now use the `--debug` flag to log detailed debugging information to the console. This
292information can help you diagnose bugs in JSDoc itself. (#416)
293+ JSDoc's configuration file can now contain JavaScript comments. (#660)
294+ You can now include source files from a directory, but exclude one of its subdirectories, by
295adding the subdirectory to the `source.exclude` option in the configuration file. (#484)
296+ The `source.exclude` option now works correctly when JSDoc is run with the `-r/--recurse` flag.
297(#616)
298+ When JSDoc is run with the `-r/--recurse` flag, it now scans for tutorials recursively. (#712)
299+ JSDoc's `-X/--explain` option now runs much more quickly. (#633)
300+ If all of the text for an `@example` tag is indented, JSDoc now removes the extra indentation.
301(#540)
302+ The default value for a parameter or property can now include brackets (for example,
303`@param {Array.<string>} [foo=['bar']]`). (#640)
304+ You can now provide a default value for parameters and properties that are not optional (for
305example, `@property {string} foo='bar'`). (#791)
306+ If the `@type` tag includes a description (for example, `@type {string} some text`), JSDoc now
307parses the type expression correctly and discards the description. (#615)
308+ You can now add JSDoc comments to function parameters. (#473)
309+ For Closure Compiler projects, you can now enable a Closure Compiler-specific tag dictionary that
310more closely matches Closure Compiler's semantics. To enable Closure Compiler semantics, set the
311configuration file's `tags.dictionaries` option to `['closure']`. This option can contain the values
312`jsdoc`, `closure`, or both. If multiple dictionaries are enabled, and a tag is defined in more than
313one dictionary, JSDoc uses the definition from the first dictionary that contains the tag. (#729,
314#730, #731, #732)
315+ If one symbol overrides another, JSDoc now adds an `overrides` property to the doclet that is
316overriding another. The `overrides` property contains the longname of the overridden symbol. (#792)
317+ When a JSDoc tag contains a type expression, the doclet's `type` object now includes a hidden
318`parsedType` property. The `parsedType` property contains a syntax tree that represents the type
319expression. The syntax tree is generated by [Catharsis](https://github.com/hegemonic/catharsis), and
320its format may change in the future. (#576)
321+ JSDoc now allows output filenames to contain non-ASCII characters. In addition, links to output
322files are now URL-encoded when necessary. (#677)
323+ JSDoc now ensures that output filenames do not have a leading underscore. (#758)
324+ JSDoc now tries to ensure that `id` attributes in output files are unique within that file. (#539)
325+ JSDoc now has an up-to-date JSON Schema file for parse results. The schema file is available in
326`lib/jsdoc/schema.js`. (#327)
327+ JSDoc now extracts more information from package files. (#710)
328+ JSDoc now displays usage information if you run JSDoc without any input files, or with an
329unrecognized command-line option. (#609, #840)
330
331### Bug fixes
332
333+ When the `allowUnknownTags` option is set to `false`, JSDoc no longer logs warnings about the
334presence of `@also` and `@scope` tags. (#574)
335+ Fixed several errors when parsing type expressions. (#619, #644, #652, #705, #767)
336+ Properties added to the `module.exports` object can now be documented. (#500)
337+ When a symbol's name starts with the same characters as its parent namespace (such as `Vector` in
338`V.Vector`), JSDoc now assigns the correct longname to the symbol. (#608)
339+ If a child class inherits from multiple parent classes, and the parent classes have instance
340members with the same name, the child class no longer displays the documentation from both parent
341classes. (#613)
342+ If a source file contains an object literal, and one of the property names is a whitespace
343character or a character that must be escaped in a regular expression, JSDoc now parses the file
344successfully. (#549, #775)
345+ Virtual comments now work correctly for overloaded functions. (#727)
346+ When a virtual comment appears within a module, JSDoc now assigns the correct values to the
347virtual comment doclet's `memberof`, `longname`, and `scope` properties. (#631)
348+ JSDoc now sets the `scope` property to `global` for all global doclets. (#684)
349+ Module doclets no longer have a `scope` property. (#782)
350+ In Markdown tutorials, JSDoc no longer unescapes HTML entities. (#743)
351+ If a longname includes a variation (for example, `Foo#bar(variation)`), the link text is now
352preserved when generating HTML links. (#857)
353+ When a single JSDoc comment includes `@class`, `@classdesc`, and `@constructor` tags, JSDoc no
354longer ignores the value of the `@classdesc` tag. (#806)
355+ For tags where the name and type are both optional (`@constant`, `@external`, `@member`,
356`@module`, `@namespace`, and `@param`), JSDoc now parses the tag correctly when it includes a type
357but not a name. (#351, #535)
358+ The `@default` tag now works correctly when used with an array literal. (#604)
359+ The `@enum` tag now works correctly when the enumeration is part of a chain of assignments (for
360example, `var FOO = exports.FOO = {/* enumerated values */}`). (#702)
361+ The `@exports` and `@module` tags now work correctly when their value includes a `module:`
362namespace (for example, `@exports module:foo`). (#786)
363+ The `@memberof` tag now works correctly when it refers to a module that is defined in a separate
364file. (#880)
365+ The `@variation` tag now works correctly when its value is enclosed in parentheses (for example,
366`@variation (foo)`). (#850)
367
368### Plugins
369
370+ Tag definitions can now have a `mustNotHaveDescription` property. When this property is set to
371`true`, JSDoc will warn the user if the tag text includes a description (such as `The description`
372in `@param {string} foo - The description`). (#615)
373+ Tag definitions can now call the method `dictionary.normalize`, which is a synonym for
374`dictionary.normalise`. (#884)
375+ The Markdown plugin no longer prevents inline `{@link}` tags from working. (#518)
376+ The Markdown plugin now converts `@author` and `@throws` tag values to HTML by default. (#736,
377#878)
378+ JSDoc now includes a `summarize` plugin that automatically generates summaries based on the
379description. (#485)
380+ JSDoc now includes an `underscore` plugin that finds symbols whose names begin with an underscore
381and automatically tags them as `@private`. (#471)
382+ Plugins can now replace the `doclet` property of `newDoclet` events. (#584)
383
384### Template improvements
385
386+ You can now override the default template's main layout file, `layout.tmpl`, by setting the
387`templates.default.layoutFile` option in JSDoc's configuration file. The property can contain a
388relative or absolute path to the replacement for `layout.tmpl`. Relative paths are resolved against
389the path to the configuration file; the current working directory; and the JSDoc directory, in that
390order. (#480)
391+ When the `templates.default.outputSourceFiles` option is set to `false`, the documentation no
392longer shows the path to each source file. (#571)
393+ You can now use the property `templates.default.staticFiles.include` to list files that will be
394copied to the output directory. For backwards compatibility, the property
395`templates.default.staticFiles.paths` is also supported but is deprecated. (#785)
396+ The property `templates.default.staticFiles.include` now works correctly when an absolute path is
397specified. (#939)
398+ The `templates.default.staticFiles` options now work correctly on Windows. (#785)
399+ In output files, you can now prevent the date from appearing in the footer by setting the property
400`templates.default.includeDate` to `false`. (#910)
401+ Output files no longer show the default value for members of an enumeration. (#689)
402+ In certain types of AMD modules, the module-overview section is no longer duplicated. (#853)
403+ If a constructor is assigned to `module.exports`, the value of the `@classdesc` tag now appears in
404the documentation. (#740)
405+ If a constructor is assigned to `module.exports`, and the constructor inherits from another class,
406the parent class is now listed in the documentation. (#594)
407+ Text within an `@example` tag, including HTML tags, is now properly escaped. (#511)
408+ If a member has a `@fires` tag, the tag information now appears in the documentation. (#568)
409+ If a symbol has members that use the `@mixin` tag, the mixins are now listed in the documentation.
410(#379, #602)
411+ When multiple `@param` tags are used to document properties of array values (for example,
412`@param {Object[]} foo` and `@param {string} foo[].bar`), the properties are now grouped into the
413appropriate row of the parameters table. (#870)
414+ If a member has a `@requires` tag, the tag information now appears in the documentation. (#563)
415+ Type expressions are now presented more clearly. (#618)
416+ Pretty-printed source files now include line numbers. (#532)
417+ When you run JSDoc with a single input file, the full path to the file no longer appears in the
418documentation. (#553)
419+ When an overloaded function is assigned to `module.exports`, the documentation now displays all of
420the signatures for the overloaded function. (#727)
421+ Resolved several issues that caused the default template to generate invalid HTML. (#843)
422
423
424## 3.2.2 (November 2013)
425
426### Bug fixes
427
428+ Addressed a regression in JSDoc 3.2.1 that could prevent a function declaration from shadowing a
429declaration with the same name in an outer scope. (#513)
430+ If a child class overrides a method in a parent class without documenting the overridden method,
431the method's documentation is now copied from the parent class. (#503)
432+ You can now use inline HTML tags in Markdown-formatted text. In addition, JSDoc now uses only the
433[marked Markdown parser](https://github.com/chjj/marked); the markdown-js parser has been removed.
434(#510)
435+ Type expressions can now include a much broader range of repeatable types. In addition, you can
436now use Closure Compiler's nullable and non-nullable modifiers with repeatable types. For example,
437the type expression `...!string` (a repeatable, non-nullable string) is now parsed correctly. (#502)
438+ If a function accepts a parameter named `prototype`, the parameter is no longer renamed during
439parsing. (#505)
440+ If the list of input files includes relative paths, the paths are now resolved relative to the
441user's working directory. (a3d33842)
442
443
444## 3.2.1 (October 2013)
445
446### Enhancements
447
448+ JSDoc's parser now fires a `processingComplete` event after JSDoc has completed all
449post-processing of the parse results. This event has a `doclets` property containing an array of
450doclets. (#421)
451+ When JSDoc's parser fires a `parseComplete` event, the event now includes a `doclets` property
452containing an array of doclets. (#431)
453+ You can now use relative paths in the JSDoc configuration file's `source.exclude` option. Relative
454paths will be resolved relative to the current working directory. (#405)
455+ If a symbol uses the `@default` tag, and its default value is an object literal, this value is now
456stored as a string, and the doclet will have a `defaultvaluetype` property containing the string
457`object`. This change enables templates to show the default value with appropriate syntax
458highlighting. (#419)
459+ Inline `{@link}` tags can now contain newlines. (#441)
460
461### Bug fixes
462
463+ Inherited symbols now indicate that they were inherited from the ancestor that defined the symbol,
464rather than the direct parent. (#422)
465+ If the first line of a JavaScript file contains a hashbang (for example, `#!/usr/bin/env node`),
466the hashbang is now ignored when the file is parsed. (#499)
467+ Resolved a crash when a JavaScript file contains a [JavaScript
4681.8](https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.8) keyword, such as
469`let`. (#477)
470+ The type expression `function[]` is now parsed correctly. (#493)
471+ If a module is tagged incorrectly, the module's output file now has a valid filename. (#440, #458)
472+ For tags that accept names, such as `@module` and `@param`, if a hyphen is used to separate the
473name and description, the hyphen must appear on the same line as the name. This change prevents a
474Markdown bullet on the followng line from being interpreted as a separator. (#459)
475+ When lenient mode is enabled, a `@param` tag with an invalid type expression no longer causes a
476crash. (#448)
477+ The `@requires` tag can now contain an inline tag in its tag text. (#486)
478+ The `@returns` tag can now contain inline tags even if a type is not specified. (#444)
479+ When lenient mode is enabled, a `@returns` tag with no value no longer causes a crash. (#451)
480+ The `@type` tag now works correctly with type expressions that span multiple lines. (#427)
481+ If a string contains inline `{@link}` tags preceded by bracketed link text (for example,
482`[test]{@link Test#test}`), HTML links are now generated correctly even if the string contains other
483bracketed text. (#470)
484+ On POSIX systems, if you run JSDoc using a symlink to the startup script, JSDoc now works
485correctly. (#492)
486
487### Default template
488
489+ Pretty-printed source files are now generated by default. To disable this feature, add the
490property `templates.default.outputSourceFiles: false` to your `conf.json` file. (#454)
491+ Links to a specific line in a source file now work correctly. (#475)
492+ Pretty-printed source files are now generated using the encoding specified in the `-e/--encoding`
493option. (#496)
494+ If a `@default` tag is added to a symbol whose default value is an object, the value is now
495displayed in the output file. (#419)
496+ Output files now identify symbols as "abstract" rather than "virtual." (#432)
497
498
499## 3.2.0 (May 2013)
500
501### Major changes
502
503+ JSDoc can now parse any valid [Google Closure Compiler type
504expression](https://developers.google.com/closure/compiler/docs/js-for-compiler#types). **Note**: As
505a result of this change, JSDoc quits if a file contains an invalid type expression. To prevent JSDoc
506from quitting, run JSDoc with the `--lenient` (`-l`) command-line option. (Multiple issues)
507+ You can now use the new `@listens` tag to indicate that a symbol listens for an event. (#273)
508
509### Enhancements
510
511+ The parser now fires a `parseBegin` event before it starts parsing files, as well as a
512`parseComplete` event after all files have been parsed. Plugins can define event handlers for these
513events, and `parseBegin` handlers can modify the list of files to parse. (#299)
514+ Event handlers for `jsdocCommentFound` events can now modify the JSDoc comment. (#228)
515+ You can now exclude tags from Markdown processing using the new option `markdown.excludeTags` in
516the configuration file. (#337)
517+ You can now use the [marked](https://github.com/chjj/marked) Markdown parser by setting the
518configuration property `markdown.parser` to `marked`. In addition, if `markdown.parser` is set to
519`gfm`, JSDoc will now use the "marked" parser instead. (#385)
520+ The `@typedef` tag no longer requires a name when used with a Closure Compiler-style type
521definition. For example, the following type definition will automatically get the name `Foo.Bar`:
522
523 ```javascript
524 /** @typedef {string} */
525 Foo.Bar;
526 ```
527
528 (#391)
529+ You can now use an inline `{@type}` tag in a parameter's description. If this tag is present,
530JSDoc will assume that the parameter uses the type specified in the inline `{@type}` tag. For
531example, the following `@param` tag would cause `myParam`'s type to be documented as `Foo`:
532
533 ```
534 @param {(boolean|string)} myParam - My special parameter. {@type Foo}
535 ```
536
537 (#152)
538+ The `console.log` function now behaves the same way as on Node.js. In addition, the functions
539`console.info`, `console.error`, `console.warn`, and `console.trace` have been implemented. (#298)
540+ You can now use npm to install JSDoc globally by running `npm install -g`. **Note**: JSDoc will
541still run under Mozilla Rhino, not Node.js. (#374)
542+ The `jsVersion` configuration property has been removed. (#390)
543
544### Bug fixes
545
546+ JSDoc now quits if the configuration file cannot be loaded. (#407)
547+ JSDoc's `--explain` (`-X`) option now runs much more quickly, and it outputs valid JSON to the
548console. (#298)
549+ JSDoc's `--lenient` (`-l`) option now prints warnings on STDERR rather than STDOUT. (#298)
550+ The parser now assigns the correct scope to object properties whose names include single quotes.
551(#386)
552+ The parser now recognizes CommonJS modules that export a single function rather than an object.
553(#384)
554+ The inline `{@link}` tag now works correctly when `@link` is followed by a tab. (#359)
555+ On POSIX systems, quoted command-line arguments are no longer split on spaces. (#397)
556
557### Plugins
558
559+ The new `overloadHelper` plugin makes it easier to link to overloaded methods. (#179)
560+ The `markdown` plugin now converts Markdown links in the `@see` tag. (#297)
561
562### Default template enhancements
563
564+ You can now use the configuration property `templates.default.staticFiles` to copy additional
565static files to the output directory. (#393)
566+ All output files now use human-readable filenames. (#339)
567+ The documentation for events now lists the symbols that listen to that event. (#273)
568+ Links to source files now allow you to jump to the line where a symbol is defined. (#316)
569+ The output files now link to individual types within a Closure Compiler type expression. (Multiple
570issues)
571+ CommonJS modules that export a single function, rather than an object, are now documented more
572clearly. (#384)
573+ Functions that can throw multiple types of errors are now documented more clearly. (#389)
574+ If a `@property` tag does not identify the property's name, the template no longer throws an
575error. (#373)
576+ The type of each `@typedef` is now displayed. (#391)
577+ If a `@see` tag contains a URL (for example, `@see http://example.com` or
578`@see <http://example.com>`), the tag text is now converted to a link. (#371)
579+ Repeatable parameters are now identified. (#381)
580+ The "Classes" header is no longer repeated in the navigation bar. (#361)
581+ When the only documented symbols in global scope are type definitions, you can now click the
582"Global" header to view their documentation. (#261)
583
584
585## 3.1.1 (February 2013)
586
587+ Resolved a crash when no input files contain JSDoc comments. (#329)
588+ Resolved a crash when JSDoc cannot identify the common prefix of several paths. (#330)
589+ Resolved a crash when the full path to JSDoc contained at least one space. (#347)
590+ Files named `README.md` or `package.json` will now be processed when they are specified on the
591command line. (#350)
592+ You can now use `@emits` as a synonym for `@fires`. (#324)
593+ The module `jsdoc/util/templateHelper` now allows you to specify the CSS class for links that are
594generated by the following methods: (#331)
595 + `getAncestorLinks`
596 + `getSignatureReturns`
597 + `getSignatureTypes`
598 + `linkto`
599
600
601## 3.1.0 (January 2013)
602
603### Major changes
604
605+ You can now use the new `@callback` tag to provide information about a callback function's
606signature. To document a callback function, create a standalone JSDoc comment, as shown in the
607following example:
608
609 ```javascript
610 /**
611 * @class
612 */
613 function MyClass() {}
614
615 /**
616 * Send a request.
617 *
618 * @param {MyClass~responseCb} cb - Called after a response is received.
619 */
620 MyClass.prototype.sendRequest = function(cb) {
621 // code
622 };
623
624 /**
625 * Callback for sending a request.
626 *
627 * @callback MyClass~responseCb
628 * @param {?string} error - Information about the error.
629 * @param {?string} response - Body of the response.
630 */
631 ```
632+ The inline link tag, `{@link}`, has been improved:
633 + You can now use a space as the delimiter between the link target and link text.
634 + In your `conf.json` file, you can now enable the option `templates.cleverLinks` to display
635 code links in a monospace font and URL links in plain text. You can also enable the option
636 `templates.monospaceLinks` to display all links in a monospace font. **Note**: JSDoc templates
637 must be updated to respect these options.
638 + You can now use the new inline tags `{@linkplain}`, which forces a plain-text link, and
639 `{@linkcode}`, which forces a monospace link. These tags always override the settings in your
640 `conf.json` file. (#250)
641+ JSDoc now provides a `-l/--lenient` option that tells JSDoc to continue running if it encounters a
642non-fatal error. (Multiple issues)
643+ A template's `publish.js` file should now assign its `publish` function to `exports.publish`,
644rather than defining a global `publish` function. The global `publish` function is deprecated and
645may not be supported in future versions. JSDoc's built-in templates reflect this change. (#166)
646+ The template helper (`templateHelper.js`) exports a variety of new functions for finding
647information within a parse tree. These functions were previously contained within the default
648template. (#186)
649+ Updated the `fs` and `path` modules to make their behavior more consistent with Node.js. In
650addition, created extended versions of these modules with additional functionality. (Multiple
651commits)
652+ Updated or replaced numerous third-party modules. (Multiple commits)
653+ Reorganized the JSDoc codebase in preparation for future enhancements. (Multiple commits)
654+ JSDoc now embeds a version of Mozilla Rhino that recognizes Node.js packages, including
655`package.json` files. (Multiple commits)
656+ Node.js' `npm` utility can now install JSDoc from its GitHub repository. **Note**: JSDoc is not
657currently compatible with Node.js. However, this change allows JSDoc to be installed as a dependency
658of a Node.js project. In this version, global installation with `npm` is not supported. (Multiple
659commits)
660
661### Enhancements
662
663+ If a `README.md` file is passed to JSDoc, its contents will be included on the `index.html` page
664of the generated documentation. (#128)
665+ The `@augments` tag can now refer to an undocumented member, such as `window.XMLHTTPRequest`.
666(#160)
667+ The `@extends` tag can now refer to an undocumented member, such as `window.XMLHttpRequest`. In
668addition, you can now use `@host` as a synonym for `@extends`. (#145)
669+ The `@lends` tag is now supported in multiline JSDoc comments. (#163)
670+ On Windows, `jsdoc.cmd` now provides the same options as the `jsdoc` shell script. (#127)
671+ JSDoc now provides `setTimeout()`, `clearTimeout()`, `setInterval()`, and `clearInterval()`
672functions. (Multiple commits)
673+ JSDoc no longer provides a global `exit()` function. Use `process.exit()` instead. (1228a8f7)
674+ JSDoc now includes additional shims for Node.js' built-in modules. **Note**: Many of these shims
675implement only the functions that JSDoc uses, and they may not be consistent with Node.js' behavior
676in edge cases. (Multiple commits)
677+ JSDoc now provides a `-v/--version` option to display information about the current version.
678(#303)
679+ When running tests, you can now use the `--nocolor` option to disable colored output. On Windows,
680colored output is always disabled. (e17601fe, 8bc33541)
681
682### Bug fixes
683
684+ When using the `@event` tag to define an event within a class or namespace, the event's longname
685is now set correctly regardless of tag order. (#280)
686+ The `@property` tag no longer results in malformed parse trees. (20f87094)
687+ The `jsdoc` and `jsdoc.cmd` scripts now work correctly with paths that include spaces. (#127,
688#130)
689+ The `jsdoc` script now works correctly on Cygwin and MinGW, and with the `dash` shell. (#182,
690#184, #187)
691+ The `-d/--destination` option is no longer treated as a path relative to the JSDoc directory.
692Instead, it can contain an absolute path, or a path relative to the current working directory.
693(f5e3f0f3)
694+ JSDoc now provides default options for the values in `conf.json`. (#129)
695+ If the `conf.json` file does not exist, JSDoc no longer tries to create it, which prevents errors
696if the current user does not have write access to the JSDoc directory. (d2d05fcb)
697+ Doclets for getters and setters are now parsed appropriately. (#150)
698+ Only the first asterisk is removed from each line of a JSDoc comment. (#172)
699+ If a child member overrides an ancestor member, the ancestor member is no longer documented.
700(#158)
701+ If a member of a namespace has the same name as a namespace, the member is now documented
702correctly. (#214)
703+ The parse tree now uses a single set of properties to track both JSDoc-style type information and
704Closure Compiler-style type information. (#118)
705+ If a type has a leading `!`, indicating that it is non-nullable, the leading `!` is now removed
706from the type name. (#226)
707+ When Markdown formatting is enabled, underscores in inline `{@link}` tags are no longer treated as
708Markdown formatting characters. (#259)
709+ Markdown links now work correctly when a JavaScript reserved word, such as `constructor`, is used
710as the link text. (#249)
711+ Markdown files for tutorials are now parsed based on the settings in `conf.json`, rather than
712using the "evilstreak" Markdown parser in all cases. (#220)
713+ If a folder contains both tutorial source files and `.js` files, JSDoc no longer attempts to parse
714the `.js` files as JSON files. (#222)
715+ The "evilstreak" Markdown parser now works correctly with files that use Windows-style line
716endings. (#223)
717+ JSDoc no longer fails unit tests when the `conf.json` file is not present. (#206)
718+ On Windows, JSDoc now passes all unit tests. (Multiple commits)
719
720### Plugins
721
722+ The new `partial` plugin adds support for a `@partial` tag, which links to an external file that
723contains JSDoc comments. (#156)
724+ The new `commentsOnly` plugin removes everything in a file except JSDoc-style comments. You can
725use this plugin to document source files that are not valid JavaScript, including source files for
726other languages. (#304)
727+ The new `eventDumper` plugin logs information about parser events to the console. (#242)
728+ The new `verbose` plugin logs the name of each input file to the console. (#157)
729
730### Template enhancements
731
732#### Default template
733
734+ The template output now includes pretty-printed versions of source files. This feature is enabled
735by default. To disable this feature, add the property `templates.default.outputSourceFiles: false`
736to your `conf.json` file. (#208)
737+ You can now use the template if it is placed outside of the JSDoc directory. (#198)
738+ The template no longer throws an error when a parameter does not have a name. (#175)
739+ The navigation bar now includes an "Events" section if any events are documented. (#280)
740+ Pages no longer include a "Classes" header when no classes are documented. (eb0186b9)
741+ Member details now include "Inherited From" section when a member is inherited from another
742member. (#154)
743+ If an `@author` tag contains text in the format "Jane Doe <jdoe@example.com>", the value is now
744converted to an HTML `mailto:` link. (#326)
745+ Headings for functions now include the function's signature. (#253)
746+ Type information is now displayed for events. (#192)
747+ Functions now link to their return type when appropriate. (#192)
748+ Type definitions that contain functions are now displayed correctly. (#292)
749+ Tutorial output is now generated correctly. (#188)
750+ Output files now use Google Code Prettify with the Tomorrow theme as a syntax highlighter. (#193)
751+ The `index.html` output file is no longer overwritten if a namespace called `index` has been
752documented. (#244)
753+ The current JSDoc version number is now displayed in the footer. (#321)
754
755#### Haruki template
756
757+ Members are now contained in arrays rather than objects, allowing overloaded members to be
758documented. (#153)
759+ A clearer error message is now provided when the output destination is not specified correctly.
760(#174)
761
762
763## 3.0.1 (June 2012)
764
765### Enhancements
766
767+ The `conf.json` file may now contain `source.include` and `source.exclude` properties. (#56)
768 + `source.include` specifies files or directories that JSDoc should _always_ check for
769 documentation.
770 + `source.exclude` specifies files or directories that JSDoc should _never_ check for
771 documentation.
772 These settings take precedence over the `source.includePattern` and `source.excludePattern`
773 properties, which contain regular expressions that JSDoc uses to search for source files.
774+ The `-t/--template` option may now specify the absolute path to a template. (#122)
775
776### Bug fixes
777
778+ JSDoc no longer throws exceptions when a symbol has a special name, such as `hasOwnProperty`.
779(1ef37251)
780+ The `@alias` tag now works correctly when documenting inner classes as globals. (810dd7f7)
781
782### Template improvements
783
784+ The default template now sorts classes by name correctly when the classes come from several
785modules. (4ce17195)
786+ The Haruki template now correctly supports `@example`, `@members`, and `@returns` tags. (6580e176,
78759655252, 31c8554d)
788
789
790## 3.0.0 (May 2012)
791
792Initial release.
793
794[605]: https://github.com/jsdoc/jsdoc/issues/605
795[738]: https://github.com/jsdoc/jsdoc/issues/738
796[970]: https://github.com/jsdoc/jsdoc/issues/970
797[1129]: https://github.com/jsdoc/jsdoc/issues/1129
798[1361]: https://github.com/jsdoc/jsdoc/issues/1361
799[1410]: https://github.com/jsdoc/jsdoc/issues/1410
800[1412]: https://github.com/jsdoc/jsdoc/issues/1412