(longname, sliceChars, forcedMemberof)
| 267 | |
| 268 | // TODO: docs |
| 269 | function atomize(longname, sliceChars, forcedMemberof) { |
| 270 | let i; |
| 271 | let memberof = ''; |
| 272 | let name = ''; |
| 273 | let parts; |
| 274 | let partsRegExp; |
| 275 | let scopePunc = ''; |
| 276 | let token; |
| 277 | const tokens = []; |
| 278 | let variation; |
| 279 | |
| 280 | // quoted strings in a longname are atomic, so we convert them to tokens: |
| 281 | // foo["bar"] => foo.@{1}@ |
| 282 | // Foo.prototype["bar"] => Foo#@{1} |
| 283 | longname = longname.replace(/(prototype|#)?(\[?["'].+?["']\]?)/g, ($, p1, p2) => { |
| 284 | let punc = ''; |
| 285 | |
| 286 | // is there a leading bracket? |
| 287 | if ( /^\[/.test(p2) ) { |
| 288 | // is it a static or instance member? |
| 289 | punc = p1 ? SCOPE.PUNC.INSTANCE : SCOPE.PUNC.STATIC; |
| 290 | p2 = p2.replace(/^\[/g, '') |
| 291 | .replace(/\]$/g, ''); |
| 292 | } |
| 293 | |
| 294 | token = `@{${tokens.length}}@`; |
| 295 | tokens.push(p2); |
| 296 | |
| 297 | return punc + token; |
| 298 | }); |
| 299 | |
| 300 | longname = prototypeToPunc(longname); |
| 301 | |
| 302 | if (typeof forcedMemberof !== 'undefined') { |
| 303 | partsRegExp = new RegExp(`^(.*?)([${sliceChars.join()}]?)$`); |
| 304 | name = longname.substr(forcedMemberof.length); |
| 305 | parts = forcedMemberof.match(partsRegExp); |
| 306 | |
| 307 | if (parts[1]) { |
| 308 | memberof = parts[1] || forcedMemberof; |
| 309 | } |
| 310 | if (parts[2]) { |
| 311 | scopePunc = parts[2]; |
| 312 | } |
| 313 | } |
| 314 | else if (longname) { |
| 315 | parts = (longname.match(new RegExp(`^(:?(.+)([${sliceChars.join()}]))?(.+?)$`)) || []) |
| 316 | .reverse(); |
| 317 | name = parts[0] || ''; |
| 318 | scopePunc = parts[1] || ''; |
| 319 | memberof = parts[2] || ''; |
| 320 | } |
| 321 | |
| 322 | // like /** @name foo.bar(2) */ |
| 323 | if ( /(.+)\(([^)]+)\)$/.test(name) ) { |
| 324 | name = RegExp.$1; |
| 325 | variation = RegExp.$2; |
| 326 | } |
no test coverage detected
searching dependent graphs…