Skip to content

v0.8.0 — five WOW features + 100/100 tests

Latest

Choose a tag to compare

@github-actions github-actions released this 23 Jul 05:56

The biggest release yet — five community-requested features from Discussion #27 landed at once, plus a sidebar UX overhaul. 100/100 tests green, tsc clean.

Each feature was researched against proven prior art before a single line was written (Atlas, Prisma, Sourcegraph, Knip, PyCharm, DataGrip, factory_boy, flake8-django, Roslyn, Ruff, Clippy).

🎯 Inline Fixes — 16 rules, 11 auto-fixers (Ruff-style codes)

  • Queryset (7): .count() > 0.exists(), .first() is Nonenot .exists(), filter().exclude() chain, for x in list(qs):, N+1 attribute-access heuristic
  • Model (5): null=True on CharField/TextField, missing __str__, ForeignKey without on_delete, CharField without max_length, TextField(max_length=...)
  • Datetime (2): datetime.now() / datetime.utcnow()timezone.now()
  • Forms (2): render(request, ..., locals()), Meta.fields = '__all__'

Suppress inline: # django-orm-lens-disable-next-line DOL007.

🎨 Sidebar UX overhaul

Stable TreeItem.id, rich description dashboard, MarkdownString tooltips with command: deep-links, FileDecorationProvider badges, TreeView.badge activity-bar count, three when-gated viewsWelcome states, view.reveal on active-editor-change.

🧪 Factory Generator

factory_boy scaffold with Faker providers keyed by field type. CharField(max_length) scales word-count buckets, DecimalField(N,D) computes left_digits=N-D, choices= maps to Iterator, M2M gets @post_generation. FK-chain pulls related factories transitively.

🕰 Schema Diff (Time-Travel)

Pick a models.py, pick two commits, get a typed diff as PR-ready markdown. Renames are first-class events, never Add+Drop. Blob-SHA LRU cache — history walks without model churn are effectively free.

🔎 Impact Analysis

Right-click a field → workspace-wide scan across models/serializers/forms/admin/views/urls/templates/tests/migrations with Certain/Likely/Possibly confidence tags on every finding.

⚡ Query Builder

Right-click → template → snippet inserted at cursor. .filter(field=?) auto-appends .select_related on FK, .annotate(post_count=Count('post_set')) honours related_name.

Under the hood

  • 7 atomic commits, each with its own research blueprint
  • 100/100 tests green (up from 4 at start of dev), 15 end-to-end user journeys
  • Per-rule severity override: djangoOrmLens.rules = { "DOL007": "off" }
  • Ruff-style select/ignore: djangoOrmLens.rulesSelect = ["DOL0"]
  • 6 new commands, 4 new right-click entries

Install

code --install-extension frowningdev.django-orm-lens
codium --install-extension frowningdev.django-orm-lens
pip install --upgrade "django-orm-lens[mcp]"

Commits: b99899a · ab7ad2c · 473d3ff · 040f2bd · 53e51f2 · 5553e5d · 2750a0d