DX Scanner is an open source CLI tool that allows you to “measure” Developer Experience directly based on your source code. DX Scanner recommends practices that can help you with improving your product development. You can fix some problems automatically with just one command.
Language | Supported |
---|---|
JavaScript/TypeScript | ✅ |
Java/Kotlin | ✅ |
Python | ✅ |
PHP | 🚧 |
C++ | 🚧 |
C# | 🚧 |
Ruby | 🚧 |
Android | 🚧 |
Swift | 🚧 |
Go | 🚧 |
We are celebrating Hacktoberfest 2020! DX Scanner is a perfect project to progress your programming skills. Our senior developers will provide feedback, if your pull request will not be merged. You can use this feedback to further improve your skills.
During the event, we will be periodically updating the "Leaderboard of Contributors" - table with the most active contributors. The Leaderboard will be posted to our Twitter. By the end of the event, Top 3 contributors will receive a permanent Badge of Honor with links to their socials/websites on this repository. On top of that, the contributor with the most merged pull requests will receive exclusive DX Heroes merchandise!
- First, please kindly fill out this DX Heroes Hacktoberfest 2020 Participant Form
- Make pull requests to one of our projects throughout October
- Keep an eye on the Leaderboard of Contributors periodically posted on our Twitter
- Have fun!
Check the Issues tab first for issues we would highly appreciate your help with. If you have a new feature on your mind, we are excited for what you will create! Creativity has no bounds! 😊
Please follow our Contribution Guide 🖤
We are looking forward to your contributions! 💙
About Hacktoberfest: https://hacktoberfest.digitalocean.com/
- Supported version control systems
- Getting Started
- Supported Languages
- Configuration
- Support
- Contributing
Sure you can use GitHub
. You can also use GitLab
and Bitbucket
no matter if it is public or private repo!
examples:
dx-scanner run https://github.com/DXHeroes/dx-scanner
dx-scanner run https://gitlab.com/ubon-refer/smart-refer-api
dx-scanner run https://bitbucket.org/maras333/node-api-with-ts
- npm (how to install npm)
- git (how to install git)
- (optional) yarn (how to install npm and yarn)
-
with NPM
npm install -g dx-scanner
-
with Yarn
yarn global add dx-scanner
dx-scanner run [path] [options]
Example:
dx-scanner run https://github.com/DXHeroes/dx-scanner
Usage: dx-scanner [command] [options]
Options:
-V, --version output the version number
-h, --help display help for command
Commands:
run [options] [path] Scan your project for possible DX recommendations
init Initialize DX Scanner configuration
practices [options] List all practices id with name and impact
help [command] display help for command
Aliases:
dxs
dxscanner
Usage: dx-scanner run [path] [options]
Scan your project for possible DX recommendations
Options:
-a --authorization <authorization> credentials to the repository (in format "token" or "username:token"; can be set as ENV variable DXSCANNER_GIT_SERVICE_TOKEN)
-t --apiToken <apiToken> credentials to DX Scanner, can be set as ENV variable DXSCANNER_API_TOKEN
--ci CI mode (default: false)
-d --details print details in reports
--fail <impact> exits process with code 1 for any non-practicing condition of given level (high|medium|small|hint|off|all) (default: "high")
--fix tries to fix problems automatically (default: false)
--fixPattern <pattern> fix only rules with IDs matching the regex
-j --json print report in JSON (default: false)
--html [path] save report in HTML file (default: false, default path: ./report.html)
-r --recursive scan all components recursively in all sub folders (default: false)
-h, --help output usage information
Examples:
dx-scanner run
dx-scanner run ./ --fail=high
dx-scanner run github.com/DXHeroes/dx-scanner
Fix problems detected by DX Scanner automatically.
dx-scanner run [PATH] --fix
This will try to fix all fixable practices which are not being practices yet. If you want to omit a practice from automatic fixing, you can do it in the configuration file (see below).
You can also specify fixPattern
flag to fix only a subset of fixable practices.
dx-scanner run [PATH] --fix --fixPattern=lint
Please note, that fixPattern
flag overrides fix
settings from configuration file. Therefore practices ommited from fixing by configuration file, but included through fixPattern
will be fixed.
Add dxscannerrc.*
config file to change default configuration settings. It can be a .json
, .yml
, or even a dotfile!
You can also run dx-scanner init
to initialize config automatically.
You can switch off practices that you do not want to scan, change their impact level, and even override their default values. To do so, refer to the id of the practice and specify your configuration.
List of All Practices 🔍
Practice | Impact | Language Independent | JavaScript/TypeScript | Java/Kotlin | Python |
---|---|---|---|---|---|
Create a Readme File | high | ✅ | ✅ | ✅ | ✅ |
Create a License File | medium | ✅ | ✅ | ✅ | ✅ |
Create a Lockfile | high | ✅ | ✅ | ✅ | ✅ |
Create a .gitignore | high | ✅ | ✅ | ✅ | ✅ |
Write in Typescript | medium | ❌ | ✅ | ❌ | ❌ |
Set .gitignore Correctly | high | ❌ | ✅ | ✅ | ❌ |
Use Continuous Integration | high | ✅ | ✅ | ✅ | ✅ |
Use Docker | small | ✅ | ✅ | ✅ | ✅ |
Use .editorconfig | small | ✅ | ✅ | ✅ | ✅ |
Format your code automatically | small | ❌ | ✅ | ❌ | ❌ |
Use ESLint | medium | ❌ | ✅ | ❌ | ❌ |
ESLint Without Errors | medium | ❌ | ✅ | ❌ | ❌ |
Use a different linter | medium | ❌ | ✅ | ❌ | ❌ |
Use JS Frontend Testing Framework | medium | ❌ | ✅ | ❌ | ❌ |
Use JS Frontend Build Tools | medium | ❌ | ✅ | ❌ | ❌ |
Use JS Backend Testing Frameworks | high | ❌ | ✅ | ❌ | ❌ |
Use a JS Logging Library | small | ❌ | ✅ | ❌ | ❌ |
Use Package Management | high | ❌ | ✅ | ✅ | ❌ |
Configure Scripts in package.json | medium | ❌ | ✅ | ❌ | ❌ |
Update Dependencies of Major Level | small | ❌ | ✅ | ✅ | ❌ |
Update Dependencies of Minor and Patch Level | high | ❌ | ✅ | ✅ | ❌ |
Do PullRequests | medium | ✅ | ✅ | ✅ | ✅ |
Break down large pull requests into smaller ones | medium | ✅ | ✅ | ✅ | ✅ |
Solve Pull Requests Continuously | medium | ✅ | ✅ | ✅ | ✅ |
Solve Issues Continuously | medium | ✅ | ✅ | ✅ | ✅ |
Write Commit Messages by Convention | small | ✅ | ✅ | ✅ | ✅ |
Use Mocking Frameworks for Tests | small | ❌ | ✅ | ✅ | ❌ |
Use Testing Frameworks | high | ❌ | ❌ | ✅ | ❌ |
Use a Java Logging Dependency | small | ❌ | ❌ | ✅ | ❌ |
Use a Java Linter Dependency | small | ❌ | ❌ | ✅ | ❌ |
Use Java Class Naming Convention | small | ❌ | ❌ | ✅ | ❌ |
Specify Versions of Dependencies | high | ❌ | ❌ | ✅ | ❌ |
Store Environment Variables Using .properties Files | medium | ❌ | ❌ | ✅ | ❌ |
Use Java Code Styles | small | ❌ | ❌ | ✅ | ❌ |
Use Java Logger Configuration Files | small | ❌ | ❌ | ✅ | ❌ |
Security vulnerabilities detected | high | ❌ | ✅ | ❌ | ❌ |
Possible impact:
high
medium
small
hint
off
Example dxscannerrc.json
:
{
"practices": {
"JavaScript.GitignoreCorrectlySet": "medium",
"JavaScript.LoggerUsed": "off",
"LanguageIndependent.DoesPullRequests": {
"impact": "small"
},
"JavaScript.ESLintWithoutErrorsPractice": {
"fix": true,
"override": {
"lintFilesPatterns": [".internal/**/*.js", "*.js"],
"ignorePatterns": []
}
},
"LanguageIndependent.ThinPullRequestsPractice": {
"impact": "high",
"override": {
"measurePullRequestCount": 500
}
}
}
}
In order to override the default values of certain practices, specify override
and nest the correct overridable variables.
Example dxscannerrc.yaml
:
---
practices:
JavaScript.GitignoreCorrectlySet: medium
JavaScript.LoggerUsed: 'off'
LanguageIndependent.DoesPullRequests:
impact: small
JavaScript.ESLintWithoutErrorsPractice:
fix: true
ovverride:
lintFilesPatterns: ['.internal/**/*.js', '*.js']
ignorePatterns: []
LanguageIndependent.ThinPullRequestsPractice:
impact: high
override:
measurePullRequestCount: 500
Basic example: run DX Scanner on each push to the repo
Create .github/workflows/main.yml
.
name: DX Scanner
on: push
jobs:
dx-scanner:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Runs DX Scanner on the code
uses: DXHeroes/dx-scanner@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
Generate your Github personal token and set it as an encrypted secret named GITHUB_TOKEN
.
The impact of each practice is represented by a specific value. DX Scanner uses these values to calculate the overall DX Score.
high = 100 points
medium = 75 points
small = 50 points
hint = 25 points
The practices you have switched off are not included in the calculation (0 points).
Didn't you find what you expected? Contact us via our public Slack!
Feel free to contribute to our DX Scanner. Please follow the Contribution Guide.
The DX Scanner open source project is licensed under the MIT.
Many thanks to these wonderful people (emoji key):
Prokop Simek 💻 🚧 |
adelkah 💻 🚧 |
Radek Holý 💻 |
Vratislav Kalenda 💻 🤔 |
Petr Vnenk 💻 |
Cuong Nguyen 💻 |
vlasy 💻 |
This project follows the all-contributors specification. Any kind of contributions are welcome!