Skip to content

Commit

Permalink
Add danger for showing dts-critic suggestions (DefinitelyTyped#44430)
Browse files Browse the repository at this point in the history
* 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 65ea09f.

* Revert "add bogus aframe change"

This reverts commit a6546bd.

* 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 08ab238.

* Revert "rebreak aframe"

This reverts commit 6ceed76.

Co-authored-by: Orta Therox <[email protected]>
  • Loading branch information
sandersn and orta authored May 11, 2020
1 parent 6684c8c commit 5f0ca35
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 4 deletions.
3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
10 changes: 6 additions & 4 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ jobs:
displayName: 'npm install'
inputs:
verbose: false

- script: |
if [[ $BUILD_REASON == "Schedule" ]]; then git config --global user.email "[email protected]" && 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 changes: 55 additions & 0 deletions dangerfile.ts
Original file line number Diff line number Diff line change
@@ -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'))
}

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"prettier": "prettier"
},
"devDependencies": {
"danger": "^10.1.1",
"dtslint": "latest",
"prettier": "^2.0.2",
"types-publisher": "github:Microsoft/types-publisher#production"
Expand Down

0 comments on commit 5f0ca35

Please sign in to comment.