Skip to content

v1.0.0 — drag-and-drop, 4 new languages, 8 commands#22

Open
ElecTreeFrying wants to merge 265 commits into
mainfrom
release/v1.0.0
Open

v1.0.0 — drag-and-drop, 4 new languages, 8 commands#22
ElecTreeFrying wants to merge 265 commits into
mainfrom
release/v1.0.0

Conversation

@ElecTreeFrying

Copy link
Copy Markdown
Owner

v1.0.0 — drag-and-drop + multi-language rebuild

Promotes the full v1.0.0 work (258 commits since v0.6.1) for release.

Highlights

  • Drag-and-drop import from the Explorer (DocumentDropEditProvider) — drop a file into any supported editor and the import lands at the drop position.
  • 4 new destination languages — Vue, Svelte, Astro, MDX (12 total).
  • 8 commands (5 new: Pick Style, Set Default Style, Set Import Placement, Toggle Preserve Script Extension, Reset All Import Styles).
  • 35 source extensions (scripts, styles, images, fonts, video, audio, text tracks, data, documents, components) and 38 configurable import styles.
  • Framework-aware placement (Astro --- frontmatter, Vue/Svelte <script> blocks), exported-class + Angular PascalCase detection, CSS-modules styles binding.

Compatibility & release prep

  • engines.vscode set to the true floor ^1.97.0 (the drop API's DocumentDropOrPasteEditKind); @types/vscode pinned to 1.97.0 as a floor guard.
  • Added capabilities (untrusted + virtual workspaces), qna, and .gitattributes; marketplace description/keywords overhauled for reach.

Full notes — including breaking changes (import-style reshuffles, minimum-version raise) — in CHANGELOG.md.

Each command's palette title now describes its action at a glance:

- Paste → Paste as Import
- Copy → Copy File Path
- Auto → Insert Import from Selected File

Command IDs (extension.pasteImport, etc.) are unchanged so user
keybindings and external integrations are unaffected.
…ries

- Description rewritten to lead with the value prop and explicitly
  name the eight supported destinations.
- Keywords trimmed to 27 high-signal entries — drop low-value
  duplicates (vscode, visual studio code, drag, bare import/relative
  /path) and out-of-scope claims (vue); add paste import, copy file
  path, explorer import, jsx, tsx, sass, es modules, esm, commonjs,
  productivity.
- Categories drop "Programming Languages" (misleading — the extension
  works across languages but doesn't add one) leaving Snippets +
  Other.
Every setting under "Auto Import Relative Path" now has:

- A precise top-level description that names what triggers the
  setting, what gets substituted, and the relevant edge case
  (Angular auto-fill, SCSS partial stripping, .css-in-.scss
  exception, cursor auto-override).
- Per-choice enumDescriptions for all dropdowns — JS gets 9, TS
  gets 5, SCSS gets 4, CSS gets 2, Markdown image gets 2, plus
  single-option contextual descriptions for the six fixed-shape
  settings.

No setting key was renamed; behaviour unchanged. Pure UX.
README, DEMO, and SUPPORT rewritten end-to-end for marketplace
polish. README leads with a value prop and a 3-step Quick Start;
DEMO is a structured gallery (Workflows · Placement Modes ·
Per-Language Output · Configuration Showcase) with text-based
output examples for every destination so the gallery still teaches
when GIFs do not load; SUPPORT walks the full triage path with
FAQ + symptom→cause→fix troubleshooting + a cleaner contribution
guide.

All three files cross-link consistently; one commit so the
cross-links never resolve to a transient broken state.
Generated by yo code and kept as a contributor onboarding aide.
The per-directory CLAUDE.md / README.md guides plus SUPPORT.md's
contribution section now cover everything this file documented.
Drop it.
Add a 19-file manual-QA checklist suite covering:

- Setup + sanity (00-01)
- Bug-fix verification (02 — anchors regression checks for every
  fix in this release)
- Copy / Paste / Auto commands (03, 12)
- Per-destination paste flows (04-11 — one file per .js / .ts /
  .jsx / .tsx / .css / .scss / .html / .md destination)
- Settings (13 placement, 14 preserve-extension)
- Gating + rejection (15)
- Path computation (16)
- Edge cases + regression (17)

Companion to extension.test.ts (which only smoke-tests command
registration). The suite is executable by a human tester
pre-publish and is the regression target referenced by the
update-manual-qa skill.
Expand the 0.7.0 entry with the user-facing summary of the 12
preceding commits: notification UX overhaul (Added), command-palette
renames + Settings-UI rewrite + marketplace metadata + doc rewrites
+ toolchain bump (Changed), Angular auto-naming with extension
preservation (Fixed), and vsc-extension-quickstart.md deletion
(Removed).
…-qa-workspace/

158 fixture files covering every supported source/destination extension,
all 5 Angular suffixes, deep-path stress fixtures, unicode and spaced
paths, gating-rejection samples, and bottom-placement landing markers.
Replaces the per-tester workspace bootstrap previously documented in
00-setup.md so checklists 01-17 can reference paths relative to a
stable workspace root.

The workspace is excluded from both compilation surfaces:
- tsconfig.json `exclude` so fixtures may use unresolved imports and
  DOM globals not in `lib`
- eslint.config.mjs `ignores` so fixtures aren't linted as source
…for AI reads

Both subdirectories are large, static, and unsearchable for useful
signal: 18 markdown checklists plus ~158 fixture files. Reading their
trees burns tokens with no payoff. The new sections in src/test/CLAUDE.md
and src/test/README.md route AI assistants to each directory's internal
README.md instead of the children, and document the build-surface
exclusions (tsconfig + eslint) so the rules aren't silently lifted.
Two stale doc strings carried the pre-0.7.0 numbers:
- src/types/notification.ts called the warning variants "five" — there
  are six (the seventh, 'copy-success', is the info variant)
- src/types/README.md called the union "Two-way" — it's seven-way
… notifications

Two coupled updates that had to land together:

- Drop the per-tester workspace-bootstrap shell script from 00-setup.md.
  The fixtures are now committed under src/test/manual-qa-workspace/, so
  setup is "open the folder in the EDH" and every checklist names paths
  relative to that root.
- Quote every expected toast byte-exactly against the seven 0.7.0
  NotificationType variants. The old "Same file path." / "Not supported."
  strings are gone; checklists now exercise no-active-editor,
  empty-clipboard, source-not-found, no-file-to-copy, and the
  parameterised not-supported / copy-success forms — and 15 documents
  the order-of-checks in paste-import.ts so each clause is testable in
  isolation.
- Update palette command titles to the renamed self-describing forms
  ("Copy File Path", "Paste as Import", "Insert Import from Selected File").
- 13 grows a Bottom-placement landing matrix tied to the new
  with-imports / with-requires / with-uses / with-resources fixtures.
- 17 picks up unicode-paths/, deeply/, very-deep/, and the degenerate
  whitespace/single-char/empty fixtures for path-stress coverage.
Split each namespace into { namespace, settings } so group metadata
lives outside the alias space and can never collide with a setting key.
Collapse preserveScriptFileExtension / preserveStylesheetFileExtension
into a single 'preserve' alias disambiguated by the namespace argument.
Regenerate ToC with nested headings, and widen the donations table to
list the EVM chains supported by the ERC-20 address (Ethereum, Base,
Monad, Polygon, HyperEVM).
…n JS/TS TSDoc

  The buildSnippet TSDoc on snippets/javascript.ts and snippets/typescript.ts
  referenced `preserveScriptFileExtension` without context, which could read
  as either the internal config alias or the public package.json setting.
  Tighten to "the user's `preserveScriptFileExtension` setting" so the
  reference is unambiguously the public name (the alias was renamed to
  `preserve` in 9f63102 and isn't a thing anywhere else).
Registers extension.pasteImportWithStyle in extension.ts and exposes
it via package.json:contributes.commands. No default keybinding —
every reasonable <mod>+i slot conflicts with VS Code defaults or
Copilot Chat, so users add their own if they want one.

- Per-language module exports buildXImportSnippetByStyle; existing
  buildSnippet delegates after reading the user's setting. TS Angular
  index-1 substitution preserved; SCSS partial-name + .css preservation
  moved up into prepareScssImportPath.
- snippets/variants.ts aggregator enumerates every applicable style for
  the current paste; calls getFilePathInfo() exactly once.
- _styles.ts gains optional ImportStyle.tag, populated on the five
  active tables from package.json enumDescriptions.
- by-style.test.ts adds 30 unit assertions; extension.test.ts asserts
  the fourth command is registered.
- 'not-supported' toast gains a 'View Supported Files' button linking
  to the README's supported-pairs anchor on GitHub. Click handler is
  self-contained inside notification.ts (fire-and-forget).
- 'copy-success' toast gains a 'Paste Now' button. The overload now
  returns Thenable<string | undefined> so copy-file-path.ts can await
  the user's choice and run extension.pasteImport on click, keeping
  editor/ from reaching into commands/.
Mirrors getAutoImportSetting via the same AUTO_IMPORT_CONFIG alias map.
Defaults to ConfigurationTarget.Global since no package.json setting
declares a scope field. Promotes AutoImportConfigNamespace and
AutoImportSettingKey to public so other modules can carry the
(namespace, key) pair through to the writer.
… toasts

Two new NotificationType variants for the set-default-style command:
no-configurable-style (warning) when the destination has only hardcoded
shapes, and default-style-saved (info) on successful persist. Adds
{ description } payload shape to the writer overload signatures.
Adds optional setting?: { namespace, key, value } to ImportSnippetVariant,
populated only on table-driven (styled) variants and undefined on hardcoded
single-shape ones. Lets set-default-import-style call setAutoImportSetting
with the right alias triple without a parallel aggregator.
New extension.setDefaultImportStyle command shares gating and the variant
aggregator with pasteImportWithStyle, but persists the picked style via
setAutoImportSetting instead of inserting a snippet. Hardcoded
destinations short-circuit to 'no-configurable-style'; the picker reorders
the variant matching the persisted value to position 0 with a
$(check) Current default indicator.
Updates the activation smoke test to assert all five commands register,
and adds manual-qa/18-style-pickers.md covering pasteImportWithStyle and
setDefaultImportStyle picker UX, persistence round-trip, and the
hardcoded-destination 'no-configurable-style' rejection.
Threads the new command through the architecture docs: root CLAUDE.md
five-command tally, per-directory CLAUDE.md/README cross-references, and
the config/snippets/notification/types guides covering the new
setAutoImportSetting writer, setting? variant field, and
no-configurable-style/default-style-saved toasts.
… full

QuickPick labels now collapse the path to its basename via path.basename
(e.g. 'foo' instead of '../../components/foo'), keeping label width
bounded regardless of source nesting depth. The inserted snippetText
still carries the full relative path, and persisted setting values stay
byte-exact against package.json:enum templates. Mechanically, every
buildXImportSnippetByStyle is now called twice per variant — once with
the full path for snippetText, once with the basename for label.
Threads labelScriptPath/labelFullPath through buildJsxVariants,
buildTsxVariants, buildCssVariants, buildScssVariants, buildHtmlVariants,
buildMarkdownVariants, buildReactNonScriptVariant, toStyledVariant, and
toHardcodedVariant. Updates snippets/CLAUDE.md and manual-qa/18 to match.
Temporary working doc enumerating per-language registry changes (removals,
default flips, additions) plus a six-PR carve-out. Added to .vscodeignore so
the audit never ships to the marketplace.
…6-05-11 ship date

Documents the two new palette commands (Paste with Style / Set Default Import
Style), the three new toast actions, the two style-flow notification kinds,
basename picker labels, the setAutoImportSetting writer, ImportSnippetVariant
metadata, the five-command registration test, the pre-built manual-QA
workspace, and the AUTO_IMPORT_CONFIG internal restructure. Updates the
release date to today.
…kers

Surfaces the two palette-only commands and the *Paste with Style* /
*Paste Now* toast actions across the user-facing docs:

- README: 3-command table → 5-command table, Highlights bullet bumped to
  five, palette quick-tip block, palette-only rebinding note.
- DEMO: new "Style Pickers" section with two sub-sections, updated
  At-a-Glance table, expanded Cursor demo with HTML/MD inline-insertion note.
- SUPPORT: two new FAQ entries (pick style on the fly / change default
  without Settings), updated rebinding answer, command count bumped.
- Bundle size phrasing harmonised to "~11 KB gzipped" (~41 KB on disk).
…riter

- Top-level + src CLAUDE: command count 3/4 → 5.
- commands CLAUDE: swap copy-success button order (Paste with Style first,
  Paste Now second) to match the rendered toast.
- snippets README: add variants.ts entry for the pick-style + set-default flows.
- snippets CLAUDE: correct non-script placeholder shape (name$1 → ${1:name}).
- types CLAUDE/README + editor README: NotificationType bumped 7 → 9
  (7 warning, 2 info) after the no-configurable-style and default-style-saved
  additions.
- config README: document the setAutoImportSetting writer alongside the
  existing reader.
- test README: smoke-test description bumped three → five commands.
Two AI-targeted guides that codify "do not scan wholesale" and the cross-file
invariants that bind procedure to fixtures:

- manual-qa-workspace/CLAUDE.md: lists the toolchain exclusions that keep
  the 158-file tree legal (tsconfig, eslint, mocha), a fixture-role table
  mapping each fixture group to the code site it exercises, the
  baselines-are-immutable rule, and the workflow for adding new fixtures.
- manual-qa/CLAUDE.md: documents the checklist anatomy, the byte-exact
  contracts with src/editor/notification.ts and src/snippets/_styles.ts,
  the monotonic numbering rule, and the change-category playbook.
- manual-qa-workspace/README.md: cross-links to the new CLAUDE.md and
  extends the "referenced by checklists" sentence through 18-style-pickers.md.
vsmarketplacebadge.apphb.com is offline; switch to the current
vsmarketplacebadges.dev host (and use the canonical-cased publisher
"ElecTreeFrying" in the badge path). Pin @types/node from wildcard 22.x to
^22.19.18 to match the caret-+-full-version style used by the rest of the
devDependencies.
…ular-guard fixes

PROFILE.md was frozen at e4c8240 (Session 2) and never updated for three later
src/ fixes. Repair the framework (.vue/.svelte/.astro) rows and asset provenance:

- styles/defaultStyle/smartId framework rows: script -> 7-style TS table;
  non-script -> fixed asset shapes (a85af78), not "all sources -> TS table".
- Fixed-asset-shape provenance -> shared _react.ts:buildAssetImportStatement,
  now called by the framework trio too (2001b3b); drop "React family only".
- Remove the resolved Delta #1 + the obsolete latent-quirk note; keep Delta #2.
- Note the Angular identifier-validity guard (b0a2505) in the smartId half.
- RECIPE item 4/8/9 extend the two-arm + no-configurable-style + drop rules to
  the framework trio; item 5 gains the Angular invalid-identifier guard case.
… discipline

The framework session drivers and design spec still described the pre-fix
behavior the IR carried. Align them with the post-freeze src/ fixes:

- QA-SESSION-PROMPTS 12a/13a notes: framework builder is two-arm now (script ->
  7-style TS table; non-script -> fixed single-variant asset shapes); drop the
  "ALL sources -> TS table (Delta #1, no fixed-asset branch)" claim.
- SPEC: asset-shape provenance -> shared _react.ts:buildAssetImportStatement;
  add framework-component.ts to the populate-list; broaden the Template-A
  reading list so framework sessions read _react.ts; note the Angular
  identifier-validity guard (b0a2505) in section 4.4 + item 5.
- _authoring/README: add the missing discipline -- "frozen" is freeze-after-
  review, not src/ auto-tracking; re-derive a row when src/ changes post-freeze.
  This is the gap that let the drift land silently.
Content was already correct; only the "Sources under test" pointers drifted.

- jsx.md: the .module.* check + 4-group asset switch + default arm moved out of
  buildReactImport into the shared buildAssetImportStatement (2001b3b); default
  now returns null and buildReactImport wraps it as an empty SnippetString.
- scss.md: cite SCSS_SUPPORTED_EXTENSIONS at its definition site
  (constants/extensions.ts:45-49), not the gating.ts consumer clause.
…cklists

The b0a2505 guard (typescript.ts:75) validates the derived Angular PascalCase
name and falls back to a bare $1 when it is not a legal identifier. The three
Angular-routed checklists were generated without that case (typescript.md
predates the fix; tsx/mdx postdate it but did not capture it). All existing
cases remain correct -- this is purely additive.

- typescript.md §5.B.11, tsx.md §5.10, mdx.md §5.10: an Angular-suffixed source
  with a leading-digit basename (2fa.service / 2fa.component, no export class)
  -> import { $1 } from '...', not a malformed 2faService/2faComponent.
- New fixtures: workspace/{typescript,tsx,mdx}/src/angular/2fa.*.ts.
- Propagate counts: each checklist sign-off + grand total; the three workspace
  READMEs (trees + mappings + totals 53->54 / 39->40); the top-level
  workspace/README + checklists/README inventory.
…+ spec parity)

A read-only faithfulness re-check of the four drift-fix commits surfaced three
issues — one new-drift introduced by the repair, two incomplete spots.

- RECIPE.md item 4: the framework parenthetical wrongly said frameworks "reject
  .ts/.tsx ... at the gate". .ts/.tsx/.js/.jsx are ACCEPTED and routed to the
  script arm; only stylesheet/font sources are gate-rejected (that is what
  eliminates the CSS-module/side-effect arms). Reworded.
- PROFILE.md smartId Angular-half: add the identifier-validity guard sentence
  (typescript.ts:75 — illegal derived name like 2fa.service -> bare $1). It was
  planned but omitted from 0a00850; RECIPE/SPEC/checklists already had it.
- QA-PIPELINE-SPEC.md §5.1: mirror RECIPE's framework-trio two-arm (item 4) and
  non-script asset-drop slot (item 9) into the self-declared-authoritative spec,
  and scope the .module.css/empty-snippet proof React-trio-only.
…(session 12, Phases A-C)

Generates checklists/vue.md (~80 human QA cases for the .vue destination, the pipeline's first framework-trio language) plus its authoring runbook, builds the .vue fixture workspace (39 fixtures: src 14 / assets 17 / destinations 8) that vue.md references, adds the Phase B-C workspace runbook, and propagates .vue into the qa.new inventory + sync docs (checklists/README.md, checklists/CLAUDE.md, qa.new/README.md, workspace/README.md).

Verified checklist<->workspace 1:1 (39 referenced, 39 present, 0 missing, 0 orphan); angular/* carry no 'export class' while classes/event-bus.ts does; 5 binaries are 0-byte; the 8 destinations/* bodies are byte-verbatim from vue.md §6/§10. No rejected/ dir -- vue.md co-locates the 9 gated-out fixtures in assets/ (allow-list, but rejects sit beside accepts).
…agate (session 13, Phases A-C)

Generates checklists/svelte.md (~80 human QA cases for the .svelte destination, the pipeline's second framework-trio language) plus its authoring runbook, builds the .svelte fixture workspace (40 fixtures: src 14 / assets 17 / destinations 9) that svelte.md references, adds the Phase B-C workspace runbook, and propagates .svelte into the qa.new inventory + sync docs (checklists/README.md, checklists/CLAUDE.md, qa.new/README.md, workspace/README.md).

.svelte shares framework-component.ts with .vue/.astro. Two deltas vs the vue workspace: it accepts its own .svelte (assets/Card.svelte) and rejects .vue (assets/Demo.vue), mirroring vue's choice; and it has no <script setup>, so destinations carry module-and-instance.svelte plus an extra module-only.svelte (tier-3 fallback) -- 9 destinations vs vue's 8. svelte slots alphabetically between scss and tsx in all four inventory docs.

Verified checklist<->workspace 1:1 (40 referenced, 40 present, 0 missing, 0 orphan); angular/* carry no 'export class' while classes/event-bus.ts does; 5 binaries are 0-byte; the 9 destinations/* bodies are byte-verbatim from svelte.md §6/§10. No rejected/ dir -- svelte.md co-locates the 9 gated-out fixtures in assets/ (allow-list, but rejects sit beside accepts).
Drops the explorer.fileNesting config (enabled/expand/patterns) that folded the workflow spec .md files (spec-sync, release-align, doc-sync-full, qa-coverage) under their .js scripts in the Explorer.
The 15 fixture-driven test files resolved FIXTURE_ROOT into the shared
qa/workspace/ tree, coupling `npm test` to the QA tooling so the QA tree
could not be reorganized or removed without breaking tests. Give the suite
its own fixtures instead.

- Copy qa/workspace/ -> src/test/fixtures/ (175 files, byte-identical,
  incl. space / unicode / deep-nested paths)
- Repoint all 15 FIXTURE_ROOT constants to src/test/fixtures (../ depth
  preserved: 3 ups, or 4 for snippets/languages)
- Exclude src/test/fixtures from tsc (tsconfig "exclude") and ESLint
  (ignore) so the 85 deliberately-invalid source fixtures are not compiled
  or linted; never emitted to out/ or shipped in the .vsix
- Update src/test + fixtures docs to the new context and depth-correct the
  relative links copied along with the tree

Verified: 524 tests passing; check-types / lint / compile-tests green;
no fixture leaks to out/. The old qa/ tree is left in place (removal is a
separate step).
…ate (session 14, Phases A-C)

Generates checklists/astro.md (~84 human QA cases for the .astro destination, the pipeline's third and final framework-trio language) plus both authoring runbooks, builds the .astro fixture workspace (38 fixtures: src 14 / assets 17 / destinations 7) that astro.md references, and propagates .astro into the qa.new inventory + sync docs (checklists/README.md, checklists/CLAUDE.md, qa.new/README.md, workspace/README.md).

.astro shares framework-component.ts with .vue/.svelte. Two deltas vs the vue/svelte workspaces: it has the widest accept-list of the trio -- it accepts .vue/.svelte/.md/.mdx (the four sources vue/svelte reject), all asset-routed, so assets split 12 accept / 5 reject (vs 8/9); and it has no <script setup> / <script context="module">, so placement is confined to flat --- frontmatter fences with no block tiers -- the block-tier destinations collapse into empty-frontmatter.astro, giving 7 destinations (vs svelte's 9, vue's 8). astro slots alphabetically first, after general / before css, in all four inventory docs.

Verified checklist<->workspace 1:1 (38 referenced, 38 present, 0 missing, 0 orphan); angular/* carry no 'export class' while classes/event-bus.ts does; 5 binaries are 0-byte; the 7 destinations/* bodies are byte-verbatim from astro.md §6/§10. No rejected/ dir -- astro.md co-locates the 5 gated-out fixtures in assets/ (allow-list, but rejects sit beside the 12 accepts).
…s/ library, promote qa.new → qa

Single commit capturing the full 7-session reorg:

- Salvage: folded the QA-pipeline spec's Guarantees + Failure-modes into
  qa/_authoring/README.md before archiving the spec.
- Archive: moved the qa-pipeline design spec, session-prompts, coverage audit
  and the spent per-language runbooks out of the tracked tree (git history
  retains them).
- docs/ library: published the import-statements design tree (criteria,
  decisions, rejection ledgers, deferred designs) into committed docs/, and
  authored the library front desk (docs/CLAUDE.md + docs/qa-pipeline.md).
- Swap: deleted the old by-category qa/ tree (now unused — the suite reads
  src/test/fixtures/) and promoted the by-language tree to qa/, sweeping the
  internal references.
- Reconciled root CLAUDE.md (qa/ + new docs/ rows), eslint.config.mjs, and
  .vscodeignore/.gitignore packaging.

SPEC.md stays in root (product front-matter). No src/ behavior change.
…rk checklists

The §7 (Paste as Import / Pick Style) sections of the 8 script/framework
checklists left the per-style QuickPick DESCRIPTION tags unpinned — a single
example (often truncated with an ellipsis) plus a generic 'the style's tag'.
Add a verbatim per-style tag table to each §7 (TS table for .ts/.tsx/.mdx/
.vue/.svelte/.astro, JS table for .js/.jsx and the .tsx/.mdx JS-fallback arm),
byte-matching src/snippets/_styles.ts and package.json enumDescriptions, plus a
'description matches the tag column' assertion. Pure doc precision; the inserted
import strings were already pinned. Stylesheet/markup checklists (scss/css/html/
markdown) already had these tables.

Surfaced by the checklist-coverage audit (the sole confirmed finding, low).
The Vue/Svelte/Astro §9.10 drag-and-drop cases described the created-if-missing
wrapper with an elided `<script>\n…\n</script>\n` / `---\n…\n---\n` shorthand
instead of the byte-exact block. Replace with the full rendered wrapper
(matching the paste-side §6.5/§6.4 blocks and placement.ts wrapperPrefix/Suffix
at :242/:210), so the dropped result is verifiable as written.

Closes the one actionable item from the checklist-coverage audit's residual
sweep (#2.4, polish).
Documentation accuracy pass across root CLAUDE.md, every src/ CLAUDE.md +
README.md, and SPEC.md, re-aligning the guides with current code:
- drop provider dropMimeTypes: ['text/uri-list'] registration + the
  now-unreachable text/plain fallback
- async buildImportSnippet (Promise<SnippetString>) on the drop path
- four-site extension-sync nuance: JSX/TSX/MDX-only sources (.pdf, fonts)
  skip the constants gating table
- Vue/Svelte/Astro non-script dispatch routes through
  _react.ts:buildAssetImportStatement
- exported-class detection excludes "export default class"
- placement-parity.test.ts cross-refs; dormant config-key rationale

Simplify the empty-clipboard warning to "Auto Import: Clipboard does not
contain a file path." (drop the "Use Auto Import: Copy File Path..."
suffix). Remove the obsolete command-title-coupling rule
(src/editor/CLAUDE.md) and its pinning test (notification.test.ts);
update SPEC.md + qa/checklists/general.md to match.

Ignore the local generated _checklist QA artifact (.gitignore, .vscodeignore).
Checklist 8.2 and the drop/CLAUDE.md comparison table stated the mechanism (DnD doesn't call clearNotifications()) but not the rationale, so the asymmetry with the command flow read as possibly accidental. Record the why: a command owns its outcome and earns the window-global notifications.clearAll at entry, whereas the drop provider only proposes an edit VS Code may discard, so firing a destructive, all-extensions clear off a drag would be too blunt. Replace the imprecise "non-interactive" label in drop/CLAUDE.md.
… as plaintext

.mdx has no built-in or ecosystem-guaranteed language ID, so a `{ language: 'mdx' }`
selector can miss files that open as plaintext and let the drop fall back to VS Code's
raw-path insert. Match `**/*.mdx` by pattern, mirroring how the paste commands key off
path.extname.
- Marketplace: rewrite description (hook + frameworks + bundlers), rebuild keywords to
  30 net-new tokens, add qna + capabilities (untrustedWorkspaces/virtualWorkspaces),
  categories -> Programming Languages + Snippets.
- Compatibility: lower engines.vscode ^1.115 -> ^1.97 (the true floor: drop provider's
  DocumentDropOrPasteEditKind); pin @types/vscode to 1.97.0 as a floor guard; sync the
  version across README, SUPPORT, CHANGELOG, release-align spec.
- Add .gitattributes (LF + binary assets); ignore coverage/ and .codex/ in .vscodeignore.
- Point README/SUPPORT URLs at /main/ ahead of the branch rename.
- Rebuild every release entry (v0.0.1–v0.6.1) from the actual git diffs, code-grounded;
  un-group the old version ranges so each release has its own entry.
- Switch headings to `## vX.Y.Z (YYYY-MM-DD)` to match the git tags.
- Use real commit dates; date v1.0.0 for the 2026-06-28 release.
Drag or paste a file into a .tex document and get the right LaTeX command,
dispatched on the source extension:

- graphics (.pdf/.png/.jpg/.jpeg/.eps) -> figure float (default), sized, or
  bare \includegraphics. The engine-renderable set only: web images
  .svg/.gif/.webp/.avif are rejected (pdflatex cannot render them).
- .tex -> \input / \include (the .tex extension is dropped).
- .bib -> \addbibresource (keeps .bib) / \bibliography (drops it).

A new latex.* settings namespace (graphics/input/bibliography styles plus
preserveGraphicsFileExtension, default keep -- inverted from the script and
stylesheet toggles). Forced-cursor placement keeps the import in the body,
never the preamble; the figure float is the extension's only multi-line
snippet. .tex is matched by file pattern since VS Code ships no guaranteed
LaTeX language id (the same approach as .mdx).

src      new snippets/languages/latex.ts + the four-site extension sync
         (types/constants/dispatch/variants), gating clause, config namespace,
         drop selector, forced-cursor placement, and RESETTABLE_STYLES
tests    latex.test.ts plus gating/variants/styles/constants/settings/
         placement/selector/import-type coverage (full suite green)
docs     design library (spec + decisions/latex.md + a CRITERIA worked
         example), every src CLAUDE/README pair, SPEC/README/SUPPORT/CHANGELOG,
         package.json (description, keywords, 45 styles / 20 settings)
qa       checklists/latex.md (53 cases) + workspace/latex/ fixtures; the
         PROFILE/RECIPE LaTeX row and graphics-preserve-toggle slot; inventory
         propagation across the qa web
.claude  release-align invariants + qa-doc-sync workspace-map row count
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant