This repository contains a minimum VS Code extension prototype for integrating
the Java-based Test Smell Detector (tsDetect).
The extension contributes one command:
- Test Smell Detector: Analyze Current File
The command validates the active editor, asks for the corresponding production Java file, runs the bundled tsDetect engine, and publishes detected test smells to both the Test Smell Detector Output panel and VS Code's Problems panel.
The extension also performs incremental analysis when a Java test file is
saved. Only the saved test/production pair is analyzed, and only that test
file's diagnostics are refreshed. Automatic analysis can be disabled with the
testSmellDetector.analyzeOnSave setting.
Each detected smell is represented as a warning diagnostic. Because the current tsDetect output reports smells at file level rather than exact source locations, the warning is anchored to the Java test class name. VS Code also shows a warning squiggle and its standard diagnostic hover at that location.
tsDetect uses a test/production file pair. The extension first remembers a
production file selected during a manual analysis. It can also match common
names such as CalculatorTest.java to Calculator.java and prefers files
under src/main. If an automatic run cannot find a match, run Analyze Current
File once and select the production file manually.
- Java must be installed and available as
javaon the system path. - The test and production Java files must be saved locally.
If Java is installed under a different executable path, set
testSmellDetector.javaPath in VS Code settings.
- Run
npm install. - Open this folder in VS Code.
- Press
F5to open an Extension Development Host. - In the new window, open a saved Java test file and keep it as the active editor.
- Open the Command Palette and run Test Smell Detector: Analyze Current File.
- Select the corresponding production Java file when prompted.
- Review the detected smells in the Problems panel and the detailed run summary in the Test Smell Detector Output panel.
- Modify and save the Java test file. The extension reruns tsDetect after a short delay and replaces that file's diagnostics automatically.
- Runs only for saved local Java test files.
- Recognizes common test suffixes such as
Test,Tests,IT, andSpec, as well as Java files undersrc/test. - Waits briefly after a save to avoid redundant work.
- Serializes detector runs for the same file and ignores outdated results.
- Allows different test files to be analyzed independently.
- Removes stale diagnostics as soon as a Java file changes.
- Can be disabled through the
testSmellDetector.analyzeOnSavesetting.
The GitHub Actions workflow runs for pull requests targeting main, pushes to
main, and manual workflow runs. It installs dependencies with npm ci,
type-checks and compiles the TypeScript extension, compares all regression
fixtures with their expected tsDetect results, and builds an installable VSIX.
The same checks can be run locally with Node.js 22 or newer and Java 11 or newer:
npm ci
npm run check
npm run compile
npm run test:corpus
npm run package:vsixnpm run test:corpus expects the compiled adapter in out/, so run
npm run compile first. The packaging command creates
test-smell-detector.vsix. In GitHub Actions, that file is retained as the
test-smell-detector-vsix workflow artifact.
- Production-file matching follows common project and filename conventions; unusual project layouts may require one manual selection.
- Results are reported at file level, so diagnostics mark the test class rather than the exact expression that caused a smell.