Skip to content

This is Exercism's automated analyzer for the TypeScript track.

License

Notifications You must be signed in to change notification settings

exercism/typescript-analyzer

Repository files navigation

@exercism/typescript-analyzer

typescript-analyzer / main typescript-analyzer / deploy

Runs static analysis using @exercism/static-analysis on exercises from the @exercism/typescript track.

Installation

Clone this repository and then run:

yarn install

You'll need at least Node LTS for this to work.

yarn build

Usage

You can run this either via yarn:

yarn analyze:bat --debug --console two-fer ~/path/to/solution/folder

Or directly via the provided shell script:

./bin/analyze.sh --debug --console two-fer ~/path/to/solution

Add the --debug and --console flags to get output in the terminal window.

Using docker

To create the image, execute the following command from the repository root:

docker build -t exercism/typescript-analyzer .

To run from docker pass in the solutions path as a volume and execute with the necessary parameters:

docker run -v $(PATH_TO_SOLUTION):/solution exercism/typescript-analyzer ${SLUG} /solution

Example:

docker run -v ~/solution-238382y7sds7fsadfasj23j:/solution exercism/typescript-analyzer two-fer /solution

Tools

We use various tools to maintain this repository and this analyzer. In order to contribute to the code of this track, you'll need NodeJS (LTS or higher) installed, with some of the bin/* files having extra dependencies, as listed in their file-level commentary.

analyze (.sh, .bat)

./bin/analyze.sh two-fer ~/folder/to/solution -dcp

This runs the analyzer using two-fer as exercise and a path to a solution. Most scripts, including this one, accept a wide range of flags to change or enhance the behaviour, as coded in execution_options.ts.

Run with the -h / --help flag to get a list of flags and their description.

./bin/analyze.sh --help

You'll most likely want -dcp (--debug,--console and --pretty) during development, which enables console output (instead of stdout/stderr) and shows logger.log as well as logger.error and logger.fatal. It will also format the output JSON with 2 space indentation, both in the output file and the console.

If you wish to preview the actual messages, pass in --noTemplates to use the analyzer CommentFactories to generate actual messages. If the comment factories are kept in-sync with website-copy, it will be the exact same output as on the site.

batch (.sh, .bat)

./bin/batch.sh two-fer -cp

Runs all the fixtures in ~/test/fixtures/two-fer through the analyzer, giving a summary at the end with all results. This places an analysis.json in the source fixture folder.

You'll most likely want -cp (--console and --pretty) during development, which enables console output (instead of stdout/stderr) and formats the output JSON with 2 space indentation.

If you wish to preview the actual messages, pass in --noTemplates to use the analyzer CommentFactories to generate actual messages. If the comment factories are kept in-sync with website-copy, it will be the exact same output as on the site.

remote (.sh, .bat)

./bin/remote.sh https://exercism.io/tracks/typescript/exercises/two-fer/solutions/41ff482d158e4a708677d1ccac0af013 -dcp --dry

You need the exercism cli in order for this to work. It takes an exercism solution url and downloads it using the exercism cli. It then runs the analyzer on it.

You'll most likely want -dcp --dry (--debug, --pretty, --console and dry run) during development, which enables console output (instead of stdout/stderr), shows logger.log as well as logger.error and logger.fatal, pretty prints the JSON output and disables writing the output to analysis.json.

You can pass the following type of URLs:

  • Published solutions: /tracks/typescript/exercises/<slug>/<id>
  • Mentor solutions: /mentor/solutions/<id>
  • Your solutions: /my/solutions/<id>
  • Private solutions: /solutions/<id>

If you wish to preview the actual messages, pass in --noTemplates to use the analyzer CommentFactories to generate actual messages. If the comment factories are kept in-sync with website-copy, it will be the exact same output as on the site.