import { Dict } from '../type' import * as prettier from 'prettier' import * as vscode from 'vscode' class Stringifier { /** * 将字典类型的描述性收集为字符串 * @param desp 描述信息 */ private stringifyDesp(desp: Dict) { let str = '{' if (typeof desp === 'object') { const keys = Object.keys(desp) keys.forEach((key) => { str += key + ':' const value = desp[key] if (typeof value === 'object') { str += this.stringifyDesp(value) + ',' } else { str += value + ',' } }) } return str + '}' } /** * 将描述信息 stringify 后 格式化 并返回 * @param desp 描述信息 * @param field 字段名,如果传入 返回 type filed = { xxx } 否则 返回 { xxx } */ public formatDesp(desp: Dict, field?: string) { let text = '' if (!field) { text = `interface defaults ${this.stringifyDesp(desp)}` } else { text = `interface ${field} ${this.stringifyDesp(desp)}` } let res = '' try { res = prettier.format(text, { semi: false, parser: 'typescript', singleQuote: true }).trim() } catch (error) { vscode.window.showErrorMessage('prettier.format出现意料之外的错误', error) } if (field) { return res } return res.replace('interface defaults ', '') } } export const sf = new Stringifier()