v0.15.1 Live • 24 Languages • 71 Smells • 92.7% F1

The Universal
Test Smell Detector

A high-performance static analysis engine that unifies Tree-sitter and Lua semantic profiles. Detect 71 canonical test smells across 24 programming languages with automated mechanical fixes and local AI-assisted refactoring.

$ cargo install omninose && omninose web
analyze fix --dry-run json output
0
Compiled Grammars
0
Canonical Smell Plugins
0%
Academic F1-Score
0
Fix Engines (Mech/Jev/AI)
Polyglot Architecture

24 Programming Languages in 1 Binary

🦀 Rust
🐍 Python
☕ Java
🔷 TypeScript
🟨 JavaScript
⚛️ TSX / JSX
🐹 Go
🎯 Dart
💎 Ruby
🐘 PHP
⚡ C++
⚙️ C
🦀 Rust
🐍 Python
☕ Java
🔷 TypeScript
🟨 JavaScript
⚛️ TSX / JSX
🐹 Go
🎯 Dart
💎 Ruby
🐘 PHP
⚡ C++
⚙️ C
🟣 C#
🕊️ Swift
💧 Elixir
🔴 Erlang
📜 Groovy
🟢 Julia
🌙 Lua
📊 R
🔴 Scala
💬 Smalltalk
🐚 Bash
⚡ Zig
🟣 C#
🕊️ Swift
💧 Elixir
🔴 Erlang
📜 Groovy
🟢 Julia
🌙 Lua
📊 R
🔴 Scala
💬 Smalltalk
🐚 Bash
⚡ Zig
Decoupled Architecture

Solving the M × N Combinatorial Problem

Traditional test smell tools re-implement detection logic for each separate language. OmniNose decouples syntax from semantic rules:

By mapping language ASTs to a single canonical Tree-sitter format and loading lightweight Lua semantic profiles, one single smell rule automatically detects issues across Rust, Python, Go, Java, TypeScript, and 19 other languages.

⚡

Zero-Cost AST

Shared memory parsing with Arc<str> node caching.

λ

Lua 5.4 Runtime

Pooled VMs with sandboxed execution & surgical queries.

OmniNose Banner

Universal Language Compatibility

Every language declares assertions, wait primitives, fixtures, and mocks in a profile. The rules read high-level predicates, completely agnostic of the underlying syntax.

Interactive Smell Showcase

See Detection & Fixes in Action

Click on a test smell below to preview how OmniNose detects it and automatically remediates the code.

Smell: Sleepy Test [Detected by OmniNose]
# Python test with arbitrary sleep delay
def test_fetch_orders():
    client.post("/sync")
-   time.sleep(5)  # Flaky & slows down CI
    orders = client.get("/orders")
    assert len(orders) > 0
Automated Fix (Mechanical / AI) [Remediated]
# Cleaned: Instant polling condition
def test_fetch_orders():
    client.post("/sync")
+   wait_until(lambda: len(client.get("/orders")) > 0, timeout=5)
    orders = client.get("/orders")
    assert len(orders) > 0
Core Capabilities

Engineered for Academic Rigor & Industrial Scale

From lightning-fast CLI invocations in CI/CD pipelines to a rich embedded Topcoat web portal.

📚

71 Canonical Smells

Full implementation of JNose, DNose, and academic taxonomies: Sleepy Test, Mystery Guest, Assertion Roulette, Eager Test, Resource Leak, Duplicate Assert, and 65 others.

🔧

Mechanical Auto-Fixes

Precise byte-span surgery (omninose fix) that automatically patches deterministic smells (e.g., converting hardcoded sleeps into await conditions or cleaning leaks).

🧠

AI-Assisted Refactoring

Integrated SLM inference via llama.cpp or remote LLMs. Generates side-by-side git diffs with an automated confidence quality check ("Verificar com IA").

⚡

Bounded Parallelism

Tokio-powered asynchronous worker pools analyze multi-thousand file codebases in seconds without starving system resources.

🌐

Embedded Topcoat Web UI

Zero-dependency HTTP server with dark/light themes, run history, code paste sandbox, and a complete catalog browser with 24-language code examples.

🎯

CI/CD Quality Gates

Exit code control with --fail-on warning|error and SARIF / JSON export for GitHub Actions, GitLab CI, and SonarQube ingestion.

How It Operates

The Four-Stage Analysis Pipeline

From raw source directories to structured reports and automated remediation.

1

Collect & Classify

Recursively traverses directories, ignores vendor/build artifacts, and assigns the appropriate grammar from 24 recognized extensions.

2

Tree-sitter Parsing

Constructs zero-copy syntax trees and compiles surgical queries (queries/*.scm) for tests, assertions, waits, and resources.

3

Lua Plugin Execution

The 71 sandboxed Lua plugins evaluate test methods against the language semantic profile with unified AST traversal helpers.

4

Reporting & Storage

Outputs formatted ANSI logs, JSON, SARIF, or commits the run inside an atomic SQLite transaction for web inspection.

output.json application/json
{
  "project_dir": "./src",
  "version": "0.15.1",
  "findings": [
    {
      "smell": "sleepy_test",
      "severity": "error",
      "file": "tests/api_test.py",
      "line": 14,
      "message": "contains 1 sleep/wait call: time.sleep(2)",
      "fixable": true
    }
  ],
  "summary": {
    "files": 148,
    "tests": 524,
    "smells": 5,
    "errors": 2,
    "warnings": 3
  }
}
Academic Pedigree

Published Research & Foundations

OmniNose is the direct evolution of pioneering research in test smell detection conducted at UFBA.

★ VIRGINIO, T. G. A.; MARTINS, L. A.; SOARES, L. R.; SANTANA, R. S.; CRUZ, A. P. S.; COSTA, H. A. X.; MACHADO, I. C. JNose: Java Test Smell Detector. In: Simpósio Brasileiro de Engenharia de Software (SBES), 2020. XXXIV SBES - Trilha de Ferramentas.

SBES 2020 • Best Tool Award Track

★ VIRGINIO, T. G. A.; MARTINS, L. A.; SOARES, L. R.; SANTANA, R. S.; COSTA, H. A. X.; MACHADO, I. C. An empirical study of automatically-generated tests from the perspective of test smells. In: Simpósio Brasileiro de Engenharia de Software (SBES), 2020. XXXIV SBES.

SBES 2020 • Research Track

★ VIRGÍNIO, TÁSSIO; SANTANA, RAILANA; MARTINS, LUANA ALMEIDA; SOARES, LARISSA ROCHA; COSTA, HEITOR; MACHADO, IVAN. On the influence of Test Smells on Test Coverage. In: XXXIII Brazilian Symposium on Software Engineering - SBES 2019, p. 467.

ACM SBES 2019
Project Authorship

Development & Leadership

Tassio Virginio

Tassio Virginio

Lead Architect & Researcher
Ph.D. Candidate in Computer Science (UFBA)

OmniNose was conceived and designed by Tassio Virginio as a cornerstone contribution of his doctoral dissertation in Computer Science at the Federal University of Bahia (UFBA), supervised by Professor Dr. Ivan Machado.

Developed within the Aries Lab research group, OmniNose consolidates years of empirical test engineering research into an open-source, universal static analyzer engineered in Rust.

Ready to clean your test suite?

Analyze your repositories in seconds with the online cloud web interface, or run OmniNose locally with our zero-dependency CLI.

▶ Launch Web App (Free) Star on GitHub ★