From 7f06abca5067f93c4cb024fd92fcc25a1fbc619c Mon Sep 17 00:00:00 2001 From: Cano1997 <1978141412@qq.com> Date: Tue, 29 Apr 2025 16:36:04 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E8=A7=86=E5=9B=BE=E3=80=81?= =?UTF-8?q?=E9=83=A8=E4=BB=B6=E3=80=81=E9=9D=A2=E6=9D=BF=E6=96=87=E6=A1=A3?= =?UTF-8?q?cli=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ctrl-generator/ctrl-generator.ts | 42 +++++--- .../panel-generator/panel-generator.ts | 102 +++++++++--------- .../generate-doc/generator/util/ast-util.ts | 3 +- .../view-generator/view-generator.ts | 19 ++-- 4 files changed, 92 insertions(+), 74 deletions(-) diff --git a/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts b/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts index dd0aec9..9ff26fa 100644 --- a/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts +++ b/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts @@ -212,6 +212,8 @@ export class CtrlGenerator extends GeneratorBase { let description = ''; // 默认值 let defaultvalue = '-'; + // 忽略输入参数 + let isIgnore = false; jsDoc.forEach((doc: any) => { const descriptionTag = doc.tags?.find( (t: any) => t.tagName.text === 'description', @@ -225,6 +227,9 @@ export class CtrlGenerator extends GeneratorBase { if (defaultTag && defaultTag.comment) { defaultvalue = defaultTag.comment; } + isIgnore = doc.tags.some( + (tag: any) => tag.tagName.text === 'ignoredoc', + ); }); // 解析类型 let parameterType = 'any'; @@ -242,12 +247,14 @@ export class CtrlGenerator extends GeneratorBase { .replace(/Object as PropType/g, ''); } } - docObject.props.push({ - name: propName, - description, - parameterType, - defaultvalue, - }); + if (!isIgnore) { + docObject.props.push({ + name: propName, + description, + parameterType, + defaultvalue, + }); + } } }); } @@ -484,7 +491,7 @@ export class CtrlGenerator extends GeneratorBase { this.docObject.props.forEach((prop: any) => { markdownContent += `| ${prop.name} | ${prop.description} | ` + - `\`${prop.parameterType.replace(/\|/g, '\\|')}\`` + + `\`${prop.parameterType}\`` + ` | ${prop.defaultvalue.replace(/\|/g, '\\|')} |\n`; }); markdownContent += `\n\n`; @@ -505,7 +512,7 @@ export class CtrlGenerator extends GeneratorBase { this.docObject.states.forEach((state: any) => { markdownContent += `| ${state.name} | ${state.description} | ` + - `\`${state.parameterType.replace(/\|/g, '\\|')}\`` + + `\`${state.parameterType}\`` + ` | ${state.defaultvalue.replace(/\|/g, '\\|')} |\n`; }); markdownContent += `\n\n`; @@ -526,7 +533,7 @@ export class CtrlGenerator extends GeneratorBase { this.docObject.fields.forEach((field: any) => { markdownContent += `| ${field.name} | ${field.description} | ` + - `\` ${field.parameterType.replace(/\|/g, '\\|')}\`` + + `\` ${field.parameterType}\`` + `|\n`; }); this.docObject.methods.forEach((method: any) => { @@ -564,20 +571,23 @@ export class CtrlGenerator extends GeneratorBase { // 控件动态参数 markdownContent += `## 控件动态参数\n\n`; + let ctrlParams = this.docObject.ctrlParams; + if (this.config.isMob) { + ctrlParams = ctrlParams.filter((ctrlParam: any) => !ctrlParam.onlyWeb); + } // 控件动态参数表格 - if ( - this.docObject && - this.docObject.ctrlParams && - this.docObject.ctrlParams.length > 0 - ) { + if (ctrlParams.length > 0) { markdownContent += `| 名称 | 说明 | 类型 | 默认值 |\n`; markdownContent += `|----------|------|------|------|\n`; - this.docObject.ctrlParams.forEach((ctrlParam: any) => { + ctrlParams.forEach((ctrlParam: any) => { + if (ctrlParam.onlyWeb && !this.config.isMob) { + return; + } markdownContent += `| ${ctrlParam.name || '-'} | ${ ctrlParam.description.replace(/\|/g, '\\|') || '-' } |` + - `\`${ctrlParam.parameterType.replace(/\|/g, '\\|') || ''}\`` + + `\`${ctrlParam.parameterType || ''}\`` + `| ${ctrlParam.defaultvalue?.replace(/\|/g, '\\|') || '-'} |\n`; }); markdownContent += `\n\n`; diff --git a/packages/core/src/generate-doc/generator/panel-generator/panel-generator.ts b/packages/core/src/generate-doc/generator/panel-generator/panel-generator.ts index fbc650c..7fb2df4 100644 --- a/packages/core/src/generate-doc/generator/panel-generator/panel-generator.ts +++ b/packages/core/src/generate-doc/generator/panel-generator/panel-generator.ts @@ -223,6 +223,28 @@ export class PanelGenerator extends GeneratorBase { mainFilePath: string, docObject: Record, ): Promise { + // 先获取根控制器属性,子类有重新属性 + const targetFilePath = path.resolve( + this.config.dirPathConfig.runtimeBasePath, + this.panelItemControllerPath, + ); + const targetFileContent = fs.readFileSync(targetFilePath, 'utf8'); + const targetSourceFileAst = ts.createSourceFile( + path.basename(targetFilePath), + targetFileContent, + ts.ScriptTarget.Latest, + true, + ); + + ts.forEachChild(targetSourceFileAst, targetNode => { + if (ts.isInterfaceDeclaration(targetNode)) { + targetNode.members.forEach(member => { + if (ts.isPropertySignature(member)) { + docObject.fields.push(parseField(member, targetSourceFileAst)); + } + }); + } + }); if (mainFilePath) { // 全路径直接使用,不用拼接 let filePath: string = mainFilePath; @@ -260,10 +282,23 @@ export class PanelGenerator extends GeneratorBase { } }); } - // 获取根控制器属性 + } + + /** + * @description 解析状态文件 + * @param {string} fieldFilePath + * @param {Record} docObject + * @returns {*} {Promise} + * @memberof PanelGenerator + */ + async parseStateFile( + fieldFilePath: string, + docObject: Record, + ): Promise { + // 先获取根状态属性,子类有重写属性 const targetFilePath = path.resolve( this.config.dirPathConfig.runtimeBasePath, - this.panelItemControllerPath, + this.panelItemStatePath, ); const targetFileContent = fs.readFileSync(targetFilePath, 'utf8'); const targetSourceFileAst = ts.createSourceFile( @@ -275,26 +310,22 @@ export class PanelGenerator extends GeneratorBase { ts.forEachChild(targetSourceFileAst, targetNode => { if (ts.isInterfaceDeclaration(targetNode)) { - targetNode.members.forEach(member => { - if (ts.isPropertySignature(member)) { - docObject.fields.push(parseField(member, targetSourceFileAst)); - } - }); + // 附加@primary标记的才解析 + const jsDocs = ts.getJSDocCommentsAndTags(targetNode); + const hasPrimaryTag = jsDocs.some( + (doc: any) => + doc.tags && + doc.tags.some((tag: any) => tag.tagName.text === 'primary'), + ); + if (hasPrimaryTag) { + targetNode.members.forEach(member => { + if (ts.isPropertySignature(member)) { + docObject.states.push(parseField(member, targetSourceFileAst)); + } + }); + } } }); - } - - /** - * @description 解析状态文件 - * @param {string} fieldFilePath - * @param {Record} docObject - * @returns {*} {Promise} - * @memberof PanelGenerator - */ - async parseStateFile( - fieldFilePath: string, - docObject: Record, - ): Promise { if (fieldFilePath) { // 全路径直接使用,不用拼接 let filePath: string = fieldFilePath; @@ -330,37 +361,6 @@ export class PanelGenerator extends GeneratorBase { } }); } - // 获取根状态属性 - const targetFilePath = path.resolve( - this.config.dirPathConfig.runtimeBasePath, - this.panelItemStatePath, - ); - const targetFileContent = fs.readFileSync(targetFilePath, 'utf8'); - const targetSourceFileAst = ts.createSourceFile( - path.basename(targetFilePath), - targetFileContent, - ts.ScriptTarget.Latest, - true, - ); - - ts.forEachChild(targetSourceFileAst, targetNode => { - if (ts.isInterfaceDeclaration(targetNode)) { - // 附加@primary标记的才解析 - const jsDocs = ts.getJSDocCommentsAndTags(targetNode); - const hasPrimaryTag = jsDocs.some( - (doc: any) => - doc.tags && - doc.tags.some((tag: any) => tag.tagName.text === 'primary'), - ); - if (hasPrimaryTag) { - targetNode.members.forEach(member => { - if (ts.isPropertySignature(member)) { - docObject.states.push(parseField(member, targetSourceFileAst)); - } - }); - } - } - }); } /** diff --git a/packages/core/src/generate-doc/generator/util/ast-util.ts b/packages/core/src/generate-doc/generator/util/ast-util.ts index 9782d24..3cfd5d4 100644 --- a/packages/core/src/generate-doc/generator/util/ast-util.ts +++ b/packages/core/src/generate-doc/generator/util/ast-util.ts @@ -75,7 +75,8 @@ export function parseMethod( let paramType = param.type ? param.type.getText(sourceFile) : 'any'; // 处理 'A' | 'B' 类型异常 paramType = paramType.replace(/\|/g, '\\|'); - return `${paramName}: ${paramType}`; + const isOptional = !!param.questionToken; + return `${paramName}${isOptional ? '?' : ''}: ${paramType}`; }) .join(', ') || ''; const descriptionTag = memberJsDocs.find( diff --git a/packages/core/src/generate-doc/generator/view-generator/view-generator.ts b/packages/core/src/generate-doc/generator/view-generator/view-generator.ts index c60d04e..98ddc44 100644 --- a/packages/core/src/generate-doc/generator/view-generator/view-generator.ts +++ b/packages/core/src/generate-doc/generator/view-generator/view-generator.ts @@ -161,6 +161,8 @@ export class ViewGenerator extends GeneratorBase { let description = ''; // 默认值 let defaultvalue = '-'; + // 忽略输入参数 + let isIgnore = false; jsDoc.forEach((doc: any) => { const descriptionTag = doc.tags?.find( (t: any) => t.tagName.text === 'description', @@ -174,6 +176,9 @@ export class ViewGenerator extends GeneratorBase { if (defaultTag && defaultTag.comment) { defaultvalue = defaultTag.comment; } + isIgnore = doc.tags.some( + (tag: any) => tag.tagName.text === 'ignoredoc', + ); }); // 解析类型 let parameterType = 'any'; @@ -191,12 +196,14 @@ export class ViewGenerator extends GeneratorBase { .replace(/Object as PropType/g, ''); } } - docObject.props.push({ - name: propName, - description, - parameterType, - defaultvalue, - }); + if (!isIgnore) { + docObject.props.push({ + name: propName, + description, + parameterType, + defaultvalue, + }); + } } }); } -- Gitee From 3cca62a03442b449033656318e95b51499f18ce4 Mon Sep 17 00:00:00 2001 From: Cano1997 <1978141412@qq.com> Date: Tue, 29 Apr 2025 17:51:10 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E9=83=A8=E4=BB=B6=E6=96=87?= =?UTF-8?q?=E6=A1=A3cli=E6=96=B0=E5=A2=9Eplatform=E9=83=A8=E4=BB=B6?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=88=A4=E6=96=AD=E4=BE=9D=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generator/ctrl-generator/ctrl-generator.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts b/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts index 9ff26fa..c9e4ee9 100644 --- a/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts +++ b/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts @@ -572,9 +572,13 @@ export class CtrlGenerator extends GeneratorBase { // 控件动态参数 markdownContent += `## 控件动态参数\n\n`; let ctrlParams = this.docObject.ctrlParams; - if (this.config.isMob) { - ctrlParams = ctrlParams.filter((ctrlParam: any) => !ctrlParam.onlyWeb); - } + ctrlParams = ctrlParams.filter((ctrlParam: any) => { + const platform = ctrlParam.platform; + return !( + platform && + (this.config.isMob ? platform === 'web' : platform === 'mob') + ); + }); // 控件动态参数表格 if (ctrlParams.length > 0) { markdownContent += `| 名称 | 说明 | 类型 | 默认值 |\n`; -- Gitee From 9b52d9a75cc8a83a36b4028a130f5f7a4d27a7a4 Mon Sep 17 00:00:00 2001 From: Cano1997 <1978141412@qq.com> Date: Tue, 29 Apr 2025 18:07:27 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E9=83=A8=E4=BB=B6=E6=96=87?= =?UTF-8?q?=E6=A1=A3cli=E5=BD=B1=E5=93=8D=E5=8F=82=E6=95=B0=E6=94=B9?= =?UTF-8?q?=E4=B8=BAeffectPlatform?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generator/ctrl-generator/ctrl-generator.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts b/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts index c9e4ee9..7f381cb 100644 --- a/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts +++ b/packages/core/src/generate-doc/generator/ctrl-generator/ctrl-generator.ts @@ -573,10 +573,12 @@ export class CtrlGenerator extends GeneratorBase { markdownContent += `## 控件动态参数\n\n`; let ctrlParams = this.docObject.ctrlParams; ctrlParams = ctrlParams.filter((ctrlParam: any) => { - const platform = ctrlParam.platform; + const effectPlatform = ctrlParam.effectPlatform; return !( - platform && - (this.config.isMob ? platform === 'web' : platform === 'mob') + effectPlatform && + (this.config.isMob + ? effectPlatform === 'web' + : effectPlatform === 'mob') ); }); // 控件动态参数表格 @@ -584,9 +586,6 @@ export class CtrlGenerator extends GeneratorBase { markdownContent += `| 名称 | 说明 | 类型 | 默认值 |\n`; markdownContent += `|----------|------|------|------|\n`; ctrlParams.forEach((ctrlParam: any) => { - if (ctrlParam.onlyWeb && !this.config.isMob) { - return; - } markdownContent += `| ${ctrlParam.name || '-'} | ${ ctrlParam.description.replace(/\|/g, '\\|') || '-' -- Gitee