Repository: eslint/doctrine (js)

Issue:
Accept slash as <namepath>
spawn from eslint/eslint#1598.

Doctrine rejects the following comments.
```js
/**
 * Base component implementation.
 *
 * @constructor
 * @extends module:stb/emitter~Emitter
 */
```

This is because doctrine doesn't support

* `/` as namepath
*  `@extends <namepath>` syntax

Pull request description:
Fix #100: add support for forward slash in namepaths
This might be too naive of an approach but appears to work as expected.

Patch:
diff --git a/lib/doctrine.js b/lib/doctrine.js
index de03a64..4fe8ca4 100644
--- a/lib/doctrine.js
+++ b/lib/doctrine.js
@@ -332,6 +332,7 @@
                     name += advance();
                 }
                 while (source.charCodeAt(index) === 0x2E  /* '.' */ ||
+                        source.charCodeAt(index) === 0x2F  /* '/' */ ||
                         source.charCodeAt(index) === 0x23  /* '#' */ ||
                         source.charCodeAt(index) === 0x7E  /* '~' */) {
                     name += advance();


Test patch:
diff --git a/test/parse.js b/test/parse.js
index c34b678..f24a5a0 100644
--- a/test/parse.js
+++ b/test/parse.js
@@ -51,6 +51,13 @@ describe('parse', function () {
         res.tags[0].should.have.property('name', 'aliasName.OK');
     });
 
+    it('alias with namepath', function () {
+        var res = doctrine.parse('/** @alias module:mymodule/mymodule.init */', { unwrap: true });
+        res.tags.should.have.length(1);
+        res.tags[0].should.have.property('title', 'alias');
+        res.tags[0].should.have.property('name', 'module:mymodule/mymodule.init');
+    });
+
     it('const', function () {
         var res = doctrine.parse('/** @const */', { unwrap: true });
         res.tags.should.have.length(1);
@@ -337,6 +344,13 @@ describe('parse', function () {
         });
     });
 
+    it('module with path', function () {
+        var res = doctrine.parse('/** @module path/to/thingName.name */', { unwrap: true });
+        res.tags.should.have.length(1);
+        res.tags[0].should.have.property('title', 'module');
+        res.tags[0].should.have.property('name', 'path/to/thingName.name');
+    });
+
     it('name', function () {
         var res = doctrine.parse('/** @name thingName.name */', { unwrap: true });
         res.tags.should.have.length(1);
@@ -789,6 +803,13 @@ describe('parse', function () {
         res.tags[0].should.have.property('name', 'ClassName.OK');
     });
 
+    it('extends with namepath', function () {
+        var res = doctrine.parse('/** @extends module:path/ClassName~OK */', { unwrap: true });
+        res.tags.should.have.length(1);
+        res.tags[0].should.have.property('title', 'extends');
+        res.tags[0].should.have.property('name', 'module:path/ClassName~OK');
+    });
+
     it('prop', function () {
         var res = doctrine.parse(
             [