ページの複数行のコメントを抽出しmarkdownファイルを生成


機能の説明
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()) })()