ページの複数行のコメントを抽出しmarkdownファイルを生成
機能の説明
js、vueなどのファイルの中の、複数行の注釈を簡単に素早く抽出して生成する.mdファイルの使用方法:1、プロジェクトのルートディレクトリの下でjsファイル(annotation-export.js)を作成し、以下のファイルをコピーして貼り付けます.2、file Path値を変更し、ドキュメントを生成するファイルアドレスパスに変更する.3、node annotation-exportを実行する.jsは、ドキュメントを生成するファイルの同級に1つ生成する.mdのファイル注:複数行の注釈のフォーマットに注意するには、必要に応じて注釈のタイプ を追加できます.
js、vueなどのファイルの中の、複数行の注釈を簡単に素早く抽出して生成する.mdファイルの使用方法:1、プロジェクトのルートディレクトリの下でjsファイル(annotation-export.js)を作成し、以下のファイルをコピーして貼り付けます.2、file Path値を変更し、ドキュメントを生成するファイルアドレスパスに変更する.3、node annotation-exportを実行する.jsは、ドキュメントを生成するファイルの同級に1つ生成する.mdのファイル
/* eslint-disable no-unused-vars */
// :annotation-export.js
/**
* , markdown
* .md
* @param {string} [filePath]
*/
//
/**
* @method templateFun
* @author webzhang
* @description markdown
* @param {array} arr
* @return {Element}
*/
let filePath = './abb.vue'
let index = filePath.lastIndexOf('.')
let producePath = filePath.slice(0, index) + '.md'
const fs = require('fs')
const path = require('path')
/**
* 。 , 。
* @param {string} reg
* @param {string} str
*/
function regCommonExec (reg, str) {
let res = reg.exec(str)
reg.lastIndex = 0
return res ? res[1] : ''
}
/**
*
* @param {string} reg
* @param {string} str
*/
function strCommonMatch (reg, str) {
let res = str.match(reg)
return res ? res : []
}
/**
*
* @param {string} str
*/
function annotationObj (str) {
//
let annotationReg = /\*\s+\@(.*?)\s/
//
let paramTypeReg = /^.+?\{(.+?)\}.*$/
//
let paramNameReg = /^.+?\[(.+?)\].*$/
// reg.exec(str)
let paramTextReg = /\s(\w.*)/
return {
category: regCommonExec(annotationReg, str),
name: regCommonExec(paramNameReg, str),
type: regCommonExec(paramTypeReg, str),
text: regCommonExec(paramTextReg, str)
}
}
/**
* @description markdown
* @method templateFun
* @author webzhang
* @param {array} arr
* @return {Element}
*/
function templateFun (arr) {
let paramTable = '| | | |
|:--:|:--:|:--:|
'
let returnTable = '| | |
|:--:|:--:|:--:|
'
let defaultObj = {
description: '',
method: '',
author: '',
param: '',
return: ''
}
/**
* @description
* @param {object} ele
* @param {string} str
*/
function tempOptionFun (ele, str) {
let tempObj = {
'method': `${ele.text}
`,
'author': ` :${ele.text}
`,
'description': ` :${ele.text}
`,
'param': `| ${ele.name} | ${ele.text} | ${ele.type} |
`,
'return': `| | ${ele.type} |
`
}
return tempObj[str]
}
arr.forEach((ele) => {
defaultObj[ele.category] += tempOptionFun(ele, ele.category)
})
return `### ${defaultObj.method}:
${defaultObj.author}${defaultObj.description}${(defaultObj.param ? paramTable + defaultObj.param : '')}${(defaultObj.return ? returnTable + defaultObj.return : '')}`
}
/**
*
* @param {string} str
*/
function processingData (str) {
//
let getAnnReg = /\/\*\*[^.|.]*?\*\//g
//
let splitAnnReg = /\*\s@.{1,}/g
//
let annotationArr = strCommonMatch(getAnnReg, str)
let formatArr = []
annotationArr.forEach(element => {
//
let paramArr = strCommonMatch(splitAnnReg, element)
let paramObjArr = []
paramArr.forEach(ele => {
paramObjArr.push(annotationObj(ele))
});
//
formatArr.push(templateFun(paramObjArr))
});
return formatArr.join('
')
}
module.exports = (() => {
/**
*
*/
const writeBack = (str) => {
let importString = processingData(str)
const filepath = path.resolve(__dirname, producePath)
fs.writeFile(filepath, importString, 'utf8', () => {
console.log(" 。。。。")
})
}
let data = fs.readFileSync(filePath);
writeBack(data.toString())
})()