diff --git a/.gitignore b/.gitignore index 5171c54..170253a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -npm-debug.log \ No newline at end of file +npm-debug.log +out \ No newline at end of file diff --git a/jsdoc_conf.json b/jsdoc_conf.json new file mode 100644 index 0000000..17b13a4 --- /dev/null +++ b/jsdoc_conf.json @@ -0,0 +1,3 @@ +{ + "plugins": ["lib/jsdoc-codesnippet"] +} \ No newline at end of file diff --git a/lib/jsdoc-codesnippet.js b/lib/jsdoc-codesnippet.js index c48d15e..e14a0b3 100644 --- a/lib/jsdoc-codesnippet.js +++ b/lib/jsdoc-codesnippet.js @@ -20,7 +20,7 @@ exports.handlers = { if (doclet.description && doclet.description.indexOf("{@snippet ") > -1) { doclet.description = doclet.description.replace(/{@snippet\s+(\w+?)(?:\s+(.*?))?}/g, function (matched, snippetCode, label) { if (snippets[snippetCode]) { - return '
' + snippets[snippetCode].content.replace(new RegExp(doclet.name, "g"), '' + doclet.name + '') + '
';
+ return '\n\n' + snippets[snippetCode].content + '\n
\n';
} else {
logger.error('Reference to inexistant snippet "' + snippetCode + '"');
return "";
@@ -41,16 +41,24 @@ exports.defineTags = function (dictionary) {
dictionary.defineTag("snippetStart", {
mustHaveValue: true,
onTagged: function onTagged(doclet, tag) {
+ // only include the last doclet tagged
+ if (!(doclet.meta.code && Object.keys(doclet.meta.code).length > 0)) {
+ return;
+ }
if (snippets[doclet.value] != null) {
logger.error('Redefinition of snippet name "' + doclet.value + '"');
} else {
- snippets[tag.value] = { start: doclet.meta.range[1] };
+ snippets[tag.value] = { start: doclet.meta.range[0] };
}
}
});
dictionary.defineTag("snippetEnd", {
mustHaveValue: true,
onTagged: function onTagged(doclet, tag) {
+ // only include the first doclet tagged
+ if (!(doclet.meta.code && Object.keys(doclet.meta.code).length === 0)) {
+ return;
+ }
if (snippets[tag.value] == null) {
logger.error('End of snippet name "' + doclet.value + '" found before its beginning. Did you forget the "@snippetStart ' + doclet.value + '" doclet?');
} else {
diff --git a/package.json b/package.json
index 037ef9e..ccd3467 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,8 @@
},
"scripts": {
"compile": "babel -d lib/ src/",
- "prepublish": "npm run compile"
+ "prepublish": "npm run compile",
+ "test": "jsdoc -c jsdoc_conf.json tests/test_parse.js && comm -12 out/global.html tests/expected.js | diff -w - tests/expected.js"
},
"keywords": [
"jsdoc",
@@ -29,7 +30,8 @@
"devDependencies": {
"babel": "^5.8.23",
"babel-preset-es2015": "^6.6.0",
- "babel-runtime": "^5.8.24"
+ "babel-runtime": "^5.8.24",
+ "jsdoc": "^3.4.3"
},
"babel": {
"presets": [
diff --git a/src/jsdoc-codesnippet.js b/src/jsdoc-codesnippet.js
index e451465..40fcbb8 100644
--- a/src/jsdoc-codesnippet.js
+++ b/src/jsdoc-codesnippet.js
@@ -18,7 +18,7 @@ exports.handlers = {
if(doclet.description && doclet.description.indexOf("{@snippet ") > -1){
doclet.description = doclet.description.replace(/{@snippet\s+(\w+?)(?:\s+(.*?))?}/g, function(matched, snippetCode, label){
if(snippets[snippetCode]){
- return `${ snippets[snippetCode].content.replace(new RegExp(doclet.name,"g"), `${ doclet.name }`) }
`;
+ return `\n\n${ snippets[snippetCode].content }\n
\n`;
} else {
logger.error(`Reference to inexistant snippet "${ snippetCode }"`);
return "";
@@ -40,16 +40,24 @@ exports.defineTags = function(dictionary) {
dictionary.defineTag("snippetStart",{
mustHaveValue:true,
onTagged: function(doclet, tag){
+ // only include the last doclet tagged
+ if (!(doclet.meta.code && Object.keys(doclet.meta.code).length > 0)) {
+ return;
+ }
if(snippets[doclet.value] != null){
logger.error(`Redefinition of snippet name "${ doclet.value }"`);
} else {
- snippets[tag.value] = {start:doclet.meta.range[1]};
+ snippets[tag.value] = {start:doclet.meta.range[0]};
}
}
});
dictionary.defineTag("snippetEnd",{
mustHaveValue:true,
onTagged: function(doclet, tag){
+ // only include the first doclet tagged
+ if (!(doclet.meta.code && Object.keys(doclet.meta.code).length === 0)) {
+ return;
+ }
if(snippets[tag.value] == null){
logger.error(`End of snippet name "${ doclet.value }" found before its beginning. Did you forget the "@snippetStart ${ doclet.value }" doclet?`);
} else {
diff --git a/tests/expected.js b/tests/expected.js
new file mode 100644
index 0000000..7889479
--- /dev/null
+++ b/tests/expected.js
@@ -0,0 +1,3 @@
+output = {
+ 'hello': 'world'
+};
diff --git a/tests/test_parse.js b/tests/test_parse.js
new file mode 100644
index 0000000..d89000a
--- /dev/null
+++ b/tests/test_parse.js
@@ -0,0 +1,16 @@
+/**
+ * @snippetStart bar
+ */
+var output = {
+ 'hello': 'world'
+};
+/**
+ * @snippetEnd bar
+ */
+
+/**
+ * @description Snippet: {@snippet bar}
+ */
+function testDocs() {
+ return;
+}