Add danger for showing dts-critic suggestions (#44430)

* First attempt

* cwd churn

* cwd churn 2

* cwd churn 3

* cwd churn 4

* cwd churn 5

* cwd churn 6

* dump ls

* Add a TS dangerfile

* Faff with the CI

* try to read suggestions

* add bogus aframe change

* use correct dir

* handle no suggestions

* delete more of aframe to get dts-critic to notice

* now try yauzl

* move danger to travis for now

* Revert "delete more of aframe to get dts-critic to notice"

This reverts commit 65ea09ff423500eb4320658dbd23adab05a6832b.

* Revert "add bogus aframe change"

This reverts commit a6546bd79f7cae2784031e0409dba731e7f3a1e5.

* first try at formatting with markdown

* maybe it's a line-oriented format

* rebreak aframe

* Better formatting

Still not best

* better wording, maybe better formatting

* maybe I need a space to get autonumbering

* even better formatting

* special-case for >5 properties

* Use a summary discolosure

* Adds links to unpkg and the dts

* Fix the unpkg link

* Better unpkg/file linking

1. only show files if more than one was edited.
2. put top-level unpkg on top-level package heading

* fix formatting and single-file skip

* url needs trailing /

* Revert "now try yauzl"

This reverts commit 08ab2388194155d008f5ed68620a788ef9b8ae57.

* Revert "rebreak aframe"

This reverts commit 6ceed76f8abcbf83db55b8afc46d612378e64bd8.

Co-authored-by: Orta Therox <orta.therox@gmail.com>
This commit is contained in:
Nathan Shively-Sanders 2020-05-11 11:07:42 -07:00 committed by GitHub
parent 6684c8c0ef
commit 5f0ca356ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 65 additions and 4 deletions

View File

@ -8,3 +8,6 @@ notifications:
script:
- npm run test
- if [[ $TRAVIS_EVENT_TYPE == "cron" ]]; then npm run update-codeowners || travis_terminate 1; fi
- TOKEN='7469b4e94ce21b43e3ab7a'
- TOKEN+='79960c12a1e067f2ec'
- DANGER_GITHUB_API_TOKEN=$TOKEN yarn danger ci

View File

@ -12,13 +12,15 @@ jobs:
displayName: 'npm install'
inputs:
verbose: false
- script: |
if [[ $BUILD_REASON == "Schedule" ]]; then git config --global user.email "types@microsoft.com" && git config --global user.name "TypeScript Bot" && npm run update-codeowners; fi
git checkout -- . && npm run test
git checkout -- .
npm run test
displayName: 'npm run test'
trigger:
- master

55
dangerfile.ts Normal file
View File

@ -0,0 +1,55 @@
import fs = require('fs')
import os = require('os')
import { markdown, danger } from "danger"
const suggestionsDir = [os.homedir(), ".dts", "suggestions"].join('/')
const lines: string[] = []
const missingProperty = /module exports a property named '(.+?)', which is missing/
if (fs.existsSync(suggestionsDir)) {
lines.push('Inspecting the JavaScript source for this package found some properties that are not in the .d.ts files.')
lines.push('The check for missing properties isn\'t always right, so take this list as advice, not a requirement.')
for (const suggestionFile of fs.readdirSync(suggestionsDir)) {
const path = [suggestionsDir, suggestionFile].join('/')
const suggestions = fs.readFileSync(path, "utf8").split('\n').map(x => JSON.parse(x)) as Array<{ fileName: string, ruleName: string, message: string }>
const packageName = suggestionFile.slice(0, suggestionFile.indexOf('.txt'))
const missingProperties: { [s: string]: string[] } = {}
for (const s of suggestions) {
const fileName = s.fileName.slice(s.fileName.indexOf("types/" + packageName + "/") + ("types/" + packageName + "/").length)
const match = s.message.match(missingProperty)
const identifier = match ? match[1] : s.message
if (fileName in missingProperties) {
missingProperties[fileName].push(identifier)
}
else {
missingProperties[fileName] = [identifier]
}
}
const topUnpkgURL = `https://unpkg.com/browse/${packageName}@latest/`;
lines.push("## " + packageName + ` ([<kbd>unpkg</kbd>](${topUnpkgURL}))`)
for (const fileName in missingProperties) {
if (Object.keys(missingProperties).length > 1) {
const originalJS = fileName.replace(".d.ts", ".js")
const unpkgURL = `https://unpkg.com/browse/${packageName}@latest/${originalJS}`
const dtsName = packageName.replace("@", "").replace("/", "__")
const dtsURL = `https://github.com/DefinitelyTyped/DefinitelyTyped/blob/${danger.github.pr.head.sha}/types/${dtsName}/${fileName}`
lines.push(`### ${fileName} ([<kbd>unpkg</kbd>](${unpkgURL}), [<kbd>d.ts</kbd>](${dtsURL}))`);
}
const properties = missingProperties[fileName]
lines.push(`was missing the following properties:
1. ` + properties.slice(0,5).join('\n1. '))
if (properties.length > 5) {
const extras = properties.slice(5)
lines.push(`
<details>
<summary>as well as these ${extras.length} other properties...</summary>
<p>${extras.join(", ")}</p>
</details>
`)
}
}
}
markdown(lines.join('\n'))
}

View File

@ -23,6 +23,7 @@
"prettier": "prettier"
},
"devDependencies": {
"danger": "^10.1.1",
"dtslint": "latest",
"prettier": "^2.0.2",
"types-publisher": "github:Microsoft/types-publisher#production"