Git Product home page Git Product logo

typescript-checkstyle's Introduction

Typescript-checkstyle

Typescript-checkstyle is a tool for reporting typescript compiler output in checkstyle format. It was created to improve pull request decoration with compiler errors.

Prerequisites

Project requires:

  • nodejs 10
  • npm

Installation

All arifacts are published to npm. To use the latest version, you can install it using:

npm i --save-dev @bartekbp/typescript-checkstyle

Usage

Typescript-checkstyle can be used from command line and javascript.

Command line

Library reads tsc output from standard input. You may want to run both of them together. The following command typechecks your project and shows compilation errors in checkstyle format:

> npx tsc --noEmit | npx @bartekbp/typescript-checkstyle

If you already have npm scripts configured and want to use output from one of them to typescript-checkstyle, you need to invoke npm with --silent to suppress npm prologue:

> npm --silent run lint:tsc | npx @bartekbp/typescript-checkstyle

Pull request decoration with typescript errors

If you want to automate adding comments to your pull request based on complier output, typescript-checkstyle will help you achieve it. To configure it, I will use jenkins, but the solution applies to other continuous integration systems as well.

Jenkins pipleline

You need to setup a jenkins pipeline that will be triggered with bitbucket branch source plugin or github branch source plugin. In the pipeline you need to run typescript-checkstyle with tsc and redirect output to a file:

stage('tsc') {
  steps {
    sh  'npx tsc --noEmit | npx @bartekbp/typescript-checkstyle > tsc-checkstyle.xml'
  }
}

Depending on your code review system, tomasbjerre created different plugins for pull request decoration. You can find the full list of them at the bottom of violations-lib readme. I'll focus on the configuration for bitbucket cloud.

You need to update pipeline with additional stage for pr decoration:

stage('Decorate pr') {
  steps {
    withCredentials([usernamePassword(credentialsId: 'jenkins-pr-writes', passwordVariable: 'JENKINS_VIOLATION_PASSWORD', usernameVariable: 'JENKINS_VIOLATION_USER')]) {
      sh 'npx violation-comments-to-bitbucket-cloud-command-line -u "$JENKINS_VIOLATION_USER" -p "$JENKINS_VIOLATION_PASSWORD" -ws workspace -rs repoName -prid "$CHANGE_ID" -v "CHECKSTYLE" "." ".*tsc-checkstyle.xml$" "tsc" || true'
    }
  }
}

The bold parts in the stage needs to updated to reflect your project:

  • jenkins-pr-writes with credentials to bitbucket user
  • workspace with bitbucket workspace
  • repoName with repository that has an opened pull request

Javascript

Typescript-checkstyle exposes one function format:

/**
 * Converts tsc errors to checkstyle format
 *
 * @param {string} input - errors from tsc
 * @return {string} errors in checkstyle format
 function format(input) {}
 */

You can use it as follows:

import format from '@bartekbp/typescript-checkstyle';

const input = `src/test.component.ts(3, 12): error TS2564: Property 'name' has no initializer`;
const errorsInCheckstyleFormat = format(input);
console.log(errorsInCheckstyleFormat);

This code prints out errors from input in checkstyle format.

License

Distributed under the MIT License. See LICENSE for more information.

Acknowledgements

Great thanks to:

  • tomasbjerre for his tools enabling pull request decoration
  • aivenkimmob for tsc output parser
  • jimf for tool to convert json to xml checkstyle format

typescript-checkstyle's People

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

typescript-checkstyle's Issues

Line endings causing issues under linux/osx when installed through yarn

First of all thank you for making this, it is exactly what I need for my CI. It works perfectly if packages have been installed through npm, however if yarn (v1) has been used it crashes with the following message.

Command:
user@machine$ ./node_modules/.bin/typescript-checkstyle

Error:
env: node\r: No such file or directory

I suspect this is because your file line endings are windows based (CRLF) instead of linux based (LF). Is there any chance you could change this?

Exit codes

Is it possible to define an exit code based on the checkstyle output?

If we run npm run tsc and it fails, it emits a non-zero exit code which will cause a CI pipeline to fail the step. However if we pipe the output to produce a checkstyle file, this exit code is lost.

In an ideal world, the checkstyle parser for a given CI would handle the report, but this is harder to guarantee. Instead, is it possible to add a flag to this tool such that if any errors are found this tool emits a non-zero exit code OR that this tool can pass through the exit code of the command that's piping into it?

If these would be acceptable we're happy to implement a PR to add the feature.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.