Skip to content

Commit

Permalink
feat: update doctor (#920)
Browse files Browse the repository at this point in the history
* feat: update doctor
  • Loading branch information
fyangstudio committed Jul 28, 2021
1 parent 23370cb commit e327650
Show file tree
Hide file tree
Showing 9 changed files with 101 additions and 43 deletions.
3 changes: 3 additions & 0 deletions extensions/doctor/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Change Log

# 1.1.3

- feat: update @appworks/codemod
- feat: update codemod check result list
## 1.1.2

- feat: update @appworks/doctor to support custom config set extends and plugins.
Expand Down
2 changes: 1 addition & 1 deletion extensions/doctor/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"displayName": "Doctor",
"description": "A free security and quality audit tool for modern DevOps teams",
"publisher": "iceworks-team",
"version": "1.1.2",
"version": "1.1.3",
"engines": {
"vscode": "^1.41.0"
},
Expand Down
81 changes: 44 additions & 37 deletions extensions/doctor/src/codemod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,7 @@ const SCAN_OPTIONS = {
};

export async function runCodemod(transform: string) {
const result = await doctor.scan(
projectPath,
Object.assign({ transforms: [transform] }, SCAN_OPTIONS),
);
const result = await doctor.scan(projectPath, Object.assign({ transforms: [transform] }, SCAN_OPTIONS));
setOutput(result.codemod?.reports[0].output || '');
return result;
}
Expand All @@ -31,53 +28,63 @@ export async function activateCodemod(context: vscode.ExtensionContext) {

const deprecatedPackageConfig = {};

const reports = await doctor.scan(projectPath, SCAN_OPTIONS);
const packageFile = path.join(projectPath, 'package.json');
const packageJSON = fs.existsSync(packageFile) ? JSON.parse(fs.readFileSync(packageFile, 'utf-8')) : {};

// Show notifaction
if (projectPath) {
if (fs.existsSync(packageFile) && projectPath) {
const reports = await doctor.scan(projectPath, SCAN_OPTIONS);
(reports.codemod?.reports || []).forEach((codemod) => {
const action = 'Run a Codemod';
if (codemod.severity > 0) {
const action = 'Run a Codemod';

if (codemod.npm_deprecate) {
const { name, version } = parse(codemod.npm_deprecate);
const dependence = (packageJSON.dependencies || {})[name] || (packageJSON.devDependencies || {})[name];
if (codemod.npm_deprecate) {
const { name, version } = parse(codemod.npm_deprecate);
const dependence = (packageJSON.dependencies || {})[name] || (packageJSON.devDependencies || {})[name];

if (dependence && semver.satisfies(semver.coerce(dependence), version || '*')) {
deprecatedPackageConfig[name] = {
...codemod,
name,
version,
};
if (dependence && semver.satisfies(semver.coerce(dependence), version || '*')) {
deprecatedPackageConfig[name] = {
...codemod,
name,
version,
};
}
}
}
const message =
`${isEn ? codemod.title_en : codemod.title}: ` +
`${isEn ? codemod.message_en : codemod.message} ` +
`( [${isEn ? 'docs' : '文档'}](${codemod.docs}) )`;
const showMessage = codemod.severity === 2 ? window.showErrorMessage : window.showWarningMessage;
const message =
`${isEn ? codemod.title_en : codemod.title}: ` +
`${isEn ? codemod.message_en : codemod.message} ` +
`( [${isEn ? 'docs' : '文档'}](${codemod.docs}) )`;
const showMessage = codemod.severity === 2 ? window.showErrorMessage : window.showWarningMessage;

showMessage(message, action).then(async (item) => {
// Run codemod
if (item === action) {
const result = await runCodemod(codemod.transform);
showMessage(message, action).then(async (item) => {
// Run codemod
if (item === action) {
const result = await runCodemod(codemod.transform);

// Remove fixed deprecated package
if (result.codemod?.reports[0].npm_deprecate) {
delete deprecatedPackageConfig[result.codemod?.reports[0].npm_deprecate];
// Remove fixed deprecated package
if (result.codemod?.reports[0].npm_deprecate) {
delete deprecatedPackageConfig[result.codemod?.reports[0].npm_deprecate];
}
}
}
});
});
}
});
}

// Show deprecate package
setDeprecatedPackage(deprecatedPackageConfig);
vscode.window.onDidChangeActiveTextEditor(() => {
setDeprecatedPackage(deprecatedPackageConfig);
}, null, context.subscriptions);
vscode.workspace.onDidChangeTextDocument(() => {
setDeprecatedPackage(deprecatedPackageConfig);
}, null, context.subscriptions);
vscode.window.onDidChangeActiveTextEditor(
() => {
setDeprecatedPackage(deprecatedPackageConfig);
},
null,
context.subscriptions,
);
vscode.workspace.onDidChangeTextDocument(
() => {
setDeprecatedPackage(deprecatedPackageConfig);
},
null,
context.subscriptions,
);
}
28 changes: 28 additions & 0 deletions extensions/doctor/web/mocks/action/getScanReport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,34 @@ export default {
codemod: {
score: 98,
reports: [
{
title: '遵循阿里巴巴前端规范,并接入 @iceworks/spec 的最佳实践',
title_en: 'Follow Alibaba FED lint rules, and use @iceworks/spec best practices',
message: '遵循阿里巴巴前端规范,并更新 rax, ice 和 react 项目中的 eslint / stylelint / prettier 配置。',
message_en: 'Follow Alibaba FED lint rules, and update eslint / stylelint / prettier in rax, ice and react project.',
severity: 0,
npm_deprecate: '@ice/spec',
transform: 'lint-config-to-spec',
docs: 'https://github.com/appworks-lab/codemod/tree/master/transforms/docs/lint-config-to-spec.md',
mode: 'check',
output: 'Processing 211 files... \n' +
'Spawning 7 workers...\n' +
'Running in dry mode, no files will be written! \n' +
'Sending 31 files to free worker...\n' +
'Sending 31 files to free worker...\n' +
'Sending 31 files to free worker...\n' +
'Sending 31 files to free worker...\n' +
'Sending 31 files to free worker...\n' +
'Sending 31 files to free worker...\n' +
'Sending 25 files to free worker...\n' +
'All done. \n' +
'Results: \n' +
'0 errors\n' +
'0 unmodified\n' +
'194 skipped\n' +
'17 ok\n' +
'Time elapsed: 3.707seconds \n'
},
{
title: 'Rax 组件工程升级',
title_en: 'Rax component project upgrade',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
}

.title {
.icon {
margin-right: 6px;
}

font-size: 16px;
font-weight: bold;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import React, { useState } from 'react';
import { Element } from 'react-scroll';
import { Icon } from '@alifd/next';
import { getReportKey } from '@/config';
import callService from '@/callService';
import Appreciate from '../Appreciate';
Expand Down Expand Up @@ -54,7 +55,17 @@ const CodemodReport = (props) => {
{(data.reports || []).map((codemod, index) => {
return (
<div key={`codemod${index}`} className={styles.codemod}>
<p className={styles.title}>{window.USE_EN ? codemod.title_en : codemod.title}</p>
<p className={styles.title}>
{codemod.severity > 0 ? (
<Icon
type="warning"
size="small"
className={styles.icon}
style={{ color: codemod.severity === 1 ? '#ff9300' : '#ff3000' }}
/>
) : null}
{window.USE_EN ? codemod.title_en : codemod.title}
</p>
<p className={styles.message}>
{window.USE_EN ? codemod.message_en : codemod.message}
<a target="_blank" href={codemod.docs} rel="noreferrer">{window.USE_EN ? ' [docs] ' : '【文档】'}</a>
Expand All @@ -78,7 +89,8 @@ const CodemodReport = (props) => {
);
})}
</div>
)}
)
}
</Element>
);
};
Expand Down
4 changes: 4 additions & 0 deletions packages/doctor/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# changelog

## 0.2.2

- Feat update @appworks/codemod.

## 0.2.1

- Support custom config set extends and plugins.
Expand Down
2 changes: 1 addition & 1 deletion packages/doctor/bin/appworks-doctor
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ if (args.scan) {
},
score: result.score || 0,
};
['ESLint', 'maintainability', 'repeatability'].forEach((key) => {
['ESLint', 'maintainability', 'repeatability', 'codemod'].forEach((key) => {
if (result[key]) {
report[key] = result[key].score;
}
Expand Down
4 changes: 2 additions & 2 deletions packages/doctor/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@appworks/doctor",
"description": "Analyse and running codemods over react/rax projects, troubleshooting and automatically fixing errors",
"version": "0.2.1",
"version": "0.2.2",
"keywords": [
"doctor",
"analysis",
Expand All @@ -25,7 +25,7 @@
"prepublishOnly": "npm run compile"
},
"dependencies": {
"@appworks/codemod": "^0.1.0",
"@appworks/codemod": "^0.2.0",
"@babel/parser": "^7.12.5",
"@babel/traverse": "^7.12.5",
"@iceworks/spec": "^1.0.2",
Expand Down

0 comments on commit e327650

Please sign in to comment.