Skip to content

CLI tool that allows you to measure quality of a team work and an app based on your source code.

License

Notifications You must be signed in to change notification settings

iamRishabh07/dx-scanner

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Tweet

Slack

Version Travis (.org) codecov last commit GitHub commit activity Downloads/week GitHub contributors All Contributors NPM TypeScript


What is DX Scanner?

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.

What language is supported?

Language Supported
JavaScript/TypeScript βœ…
Java/Kotlin βœ…
Python βœ…
PHP 🚧
C++ 🚧
C# 🚧
Ruby 🚧
Android 🚧
Swift 🚧
Go 🚧

Hacktoberfest 2020 πŸŽ‰

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!

How to participate in the Leaderboard of Contributors?

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/

Table of Contents

Which version control system can you use?

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

Getting Started 🏁

Dependencies

Installation

  • with NPM

    npm install -g dx-scanner

  • with Yarn

    yarn global add dx-scanner

Usage

  dx-scanner run [path] [options]

Example:

  dx-scanner run https://github.com/DXHeroes/dx-scanner

Commands

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

Options for dx-scanner run

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

Auto-fixer

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.

Configuration βš™οΈ

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.

Practices

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

Github CI Action

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.

Score Computation πŸ’―

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).

Support πŸ¦Έβ€β™€οΈ πŸ¦Έβ€β™‚οΈ

Didn't you find what you expected? Contact us via our public Slack!

Contributing πŸ‘©β€πŸ’» πŸ‘¨β€πŸ’»

Feel free to contribute to our DX Scanner. Please follow the Contribution Guide.

License πŸ“

The DX Scanner open source project is licensed under the MIT.

Contributors ✨

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!

About

CLI tool that allows you to measure quality of a team work and an app based on your source code.

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 99.3%
  • Other 0.7%