Skip to main content

Guess programming language from a string or file.

Project description

whats_that_code

This is a Python programming language detection library.

It detects the programming language of source code with an ensemble of classifiers. Use this when a quick first approximation is good enough. Accuracy depends heavily on the available hints; checked-in reports live in docs/accuracy.md.

I created this because I wanted

  • a Python programming language detector
  • no machine learning dependencies

Tested on python 3.10 through 3.14.

Badges

Libraries.io SourceRank

Downloads

CodeFactor

Usage

from whats_that_code.election import guess_language_all_methods
code = "def yo():\n   print('hello')"
result = guess_language_all_methods(code, file_name="yo.py")
assert result == "python"  # returns a single language name (str), or None if unknown

Suppressing rare languages (opt-in)

Pass an Options to avoid guessing obscure languages unless there is strong evidence (a matching file extension, shebang, or tag). The default is unchanged — no suppression — so existing callers are unaffected.

from whats_that_code.election import guess_language_all_methods
from whats_that_code.options import Options

# "common" keeps only mainstream languages; "uncommon" also keeps established ones.
guess_language_all_methods(code, options=Options(min_tier="common"))

# A .zig file is still detected as Zig even though Zig is below "common":
guess_language_all_methods(code, file_name="x.zig", options=Options(min_tier="common"))  # -> "zig"

Speed

Regex marker matching (the hottest path) runs on Google's re2 — a normal dependency, installed automatically — which is linear-time and ~6× faster on large inputs, with identical results. If a platform has no re2 wheel it transparently falls back to stdlib re. Nothing to configure.

The parser trick (optional at runtime)

With Options(use_parsers=True) the code is actually parsed; a clean parse is strong evidence for that language. This uses stdlib parsers (Python/JSON/XML/TOML) plus ~26 tree-sitter grammars that are installed with the main package.

On the evaluation corpus this lifted code-only accuracy from ~13% to ~21% when added. It is off by default, so existing callers are unaffected.

guess_language_all_methods(go_source, options=Options(use_parsers=True))  # -> "go"

How it Works

  1. Inspects file extension if available.
  2. Inspects shebang
  3. Looks for keywords
  4. Counts regexes for common patterns
  5. Attempts to parse Python, JSON, XML, and TOML
  6. Inspects tags if available.

Each is imperfect and can error. The classifier then combines the results of each using a voting algorithm

This works best if you only use it for fallback, e.g. classifying code that can't already be classified by extension or tag, or when tag is ambiguous.

It was a tool that outgrew being a part of so_pip a StackOverflow code extraction tool I wrote.

Docs

Notable Similar Tools

  • Guesslang - python and tensorflow driven solution. Reasonable results but slow startup and not pure python.
  • pygments pure python, but sometimes lousy identification rates.

Project Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

whats_that_code-0.3.1.tar.gz (96.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

whats_that_code-0.3.1-py3-none-any.whl (87.6 kB view details)

Uploaded Python 3

File details

Details for the file whats_that_code-0.3.1.tar.gz.

File metadata

  • Download URL: whats_that_code-0.3.1.tar.gz
  • Upload date:
  • Size: 96.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for whats_that_code-0.3.1.tar.gz
Algorithm Hash digest
SHA256 6c09569e103f80da00fee09726c797258d5d5fa143612e8a92da5cc137031e52
MD5 ecb5f25de47164b4ac35c6b2c67af72e
BLAKE2b-256 631a89b527187ce7755ae743dbe15d768422c012a9629d5df3af32ab038e98f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for whats_that_code-0.3.1.tar.gz:

Publisher: release.yml on matthewdeanmartin/whats_that_code

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file whats_that_code-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for whats_that_code-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 659b7026723abc08c1ab894192d4ada48598c6c1d11e16737a942660bee81f06
MD5 80ae9723774a8ce6eb6178bb0ba6413b
BLAKE2b-256 57525d95e088fda5ce23d3df4694b5d3e16687ea41f4d46e4d01d5045c3b550a

See more details on using hashes here.

Provenance

The following attestation bundles were made for whats_that_code-0.3.1-py3-none-any.whl:

Publisher: release.yml on matthewdeanmartin/whats_that_code

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page