From 83d44bee0134e3b8b6b98bf89e1f02981d72adee Mon Sep 17 00:00:00 2001 From: Vse Mozhet Byt Date: Fri, 30 Mar 2018 12:28:34 +0300 Subject: [PATCH] tools: dry utility function in tools/doc/json.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also, move a declaration of unrelated variable closer to its only context. PR-URL: https://github.com/nodejs/node/pull/19692 Reviewed-By: Ruben Bridgewater Reviewed-By: Tobias Nießen --- tools/doc/json.js | 55 ++++++++++++++++------------------------------- 1 file changed, 19 insertions(+), 36 deletions(-) diff --git a/tools/doc/json.js b/tools/doc/json.js index 6eaee8c7fc1688..87122cea70fd56 100644 --- a/tools/doc/json.js +++ b/tools/doc/json.js @@ -323,6 +323,8 @@ function processList(section) { delete section.list; } +const paramExpr = /\((.*)\);?$/; + // textRaw = "someobject.someMethod(a[, b=100][, c])" function parseSignature(text, sig) { var params = text.match(paramExpr); @@ -556,42 +558,23 @@ function deepCopy_(src) { // These parse out the contents of an H# tag. -const eventExpr = /^Event(?::|\s)+['"]?([^"']+).*$/i; -const classExpr = /^Class:\s*([^ ]+).*$/i; -const propExpr = /^[^.]+\.([^ .()]+)\s*$/; -const braceExpr = /^[^.[]+(\[[^\]]+\])\s*$/; -const classMethExpr = /^class\s*method\s*:?[^.]+\.([^ .()]+)\([^)]*\)\s*$/i; -const methExpr = /^(?:[^.]+\.)?([^ .()]+)\([^)]*\)\s*$/; -const newExpr = /^new ([A-Z][a-zA-Z]+)\([^)]*\)\s*$/; -var paramExpr = /\((.*)\);?$/; - -function newSection(tok) { - const section = {}; +const headingExpressions = [ + { type: 'event', re: /^Event(?::|\s)+['"]?([^"']+).*$/i }, + { type: 'class', re: /^Class:\s*([^ ]+).*$/i }, + { type: 'property', re: /^[^.[]+(\[[^\]]+\])\s*$/ }, + { type: 'property', re: /^[^.]+\.([^ .()]+)\s*$/ }, + { type: 'classMethod', re: /^class\s*method\s*:?[^.]+\.([^ .()]+)\([^)]*\)\s*$/i }, + { type: 'method', re: /^(?:[^.]+\.)?([^ .()]+)\([^)]*\)\s*$/ }, + { type: 'ctor', re: /^new ([A-Z][a-zA-Z]+)\([^)]*\)\s*$/ }, +]; + +function newSection({ text }) { // Infer the type from the text. - const text = section.textRaw = tok.text; - if (text.match(eventExpr)) { - section.type = 'event'; - section.name = text.replace(eventExpr, '$1'); - } else if (text.match(classExpr)) { - section.type = 'class'; - section.name = text.replace(classExpr, '$1'); - } else if (text.match(braceExpr)) { - section.type = 'property'; - section.name = text.replace(braceExpr, '$1'); - } else if (text.match(propExpr)) { - section.type = 'property'; - section.name = text.replace(propExpr, '$1'); - } else if (text.match(classMethExpr)) { - section.type = 'classMethod'; - section.name = text.replace(classMethExpr, '$1'); - } else if (text.match(methExpr)) { - section.type = 'method'; - section.name = text.replace(methExpr, '$1'); - } else if (text.match(newExpr)) { - section.type = 'ctor'; - section.name = text.replace(newExpr, '$1'); - } else { - section.name = text; + for (const { type, re } of headingExpressions) { + const [, name] = text.match(re) || []; + if (name) { + return { textRaw: text, type, name }; + } } - return section; + return { textRaw: text, name: text }; }