rojo/.cursor/plans/sync_vscode-rojo_schemas_6f3a7b26.plan.md
Joe edfe15a143 Add vscode-rojo submodule and update schemas for Atlas rebranding
- Added the vscode-rojo submodule to the project, linking to the UserGeneratedLLC repository.
- Created a new plan for syncing vscode-rojo schemas, detailing updates to project, meta, and model schemas to align with the Rojo fork and rebrand as "Atlas".
- Enhanced the Theme and DomLabel components to support subtree highlighting, improving user interaction in the PatchVisualizer.
- Updated the PatchVisualizer to manage subtree highlight state and ancestor IDs for better visual feedback during selection.
2026-02-07 11:56:14 -06:00

10 KiB

name overview todos isProject
Sync vscode-rojo schemas Update the vscode-rojo extension's schemas, file associations, TypeScript code, and branding to match this Rojo fork -- rebrand as "Atlas", add JSON5 support, new project fields, new file schemas, new middleware types, and syncback rules.
id content status
update-project-schema Overhaul project.template.schema.json: make name optional, add all new fields with descriptions from Rust doc comments. Every field gets a concise description for VS Code tooltip intellisense. completed
id content status
create-meta-schema Create meta.template.schema.json with documented fields. Descriptions sourced from meta_file.rs doc comments. completed
id content status
create-model-schema Create model.template.schema.json with documented fields. Descriptions sourced from json_model.rs doc comments. completed
id content status
update-package-json Rebrand package.json to Atlas (name, displayName, publisher, commands, config keys, activation events), add json5 file associations, new schema entries for meta/model, update GitHub URL completed
id content status
update-generate-plugin Update GenerateSchemaPlugin.js to also generate meta.schema.json and model.schema.json, inject class names into model schema completed
id content status
rebrand-typescript Rebrand all user-facing strings from 'Rojo' to 'Atlas' in TS files, update command IDs from vscode-rojo.* to vscode-atlas.*, update GitHub/docs links, add .project.json5 support to findProjectFiles and openMenu completed
id content status
update-readme Rebrand README.md from Rojo to Atlas, update GitHub links, mention json5 support completed
false

Sync vscode-rojo Extension with Rojo Fork + Atlas Rebrand

Three Concerns

  1. Schema sync -- bring schemas up to date with all Rojo fork changes
  2. Schema documentation -- every field gets a concise description from the Rust doc comments, so VS Code shows useful tooltips
  3. Atlas rebrand -- rename all user-facing text, VS Code registration IDs, and links

NOT in scope: Renaming actual file paths, folders, TypeScript variable/type names, or dependencies. Only front-end text, VS Code command/config IDs, and links change.


Schema Changes

1. Update project.template.schema.json -- Major overhaul

Source of truth: src/project.rs lines 61-149 (Project), 372-435 (ProjectNode)

Top-level changes:

  • name -- change from required to optional
  • Add $schema (string), blockedPlaceIds (integer[]), syncbackRules (object), syncRules (SyncRule[]), syncScriptsOnly (boolean), ignoreHiddenServices (boolean)
  • Fix servePlaceIds items to integer
  • Remove "required": ["name", "tree"] -- only tree required

Tree node additions: $id (string), $attributes (object)

SyncbackRules sub-schema (from src/syncback/mod.rs lines 959-1015):

  • ignoreTrees, ignorePaths, ignoreClasses: string[]
  • ignoreProperties: { [className]: string[] }
  • syncCurrentCamera, syncUnscriptable, ignoreReferents, createIgnoreDirPaths, encodeWindowsInvalidChars, ignoreHiddenServices, warnDuplicateNames: boolean

SyncRule sub-schema (src/snapshot/metadata.rs lines 294-313):

  • pattern (string), exclude (string, optional), use (Middleware enum), suffix (string, optional)

Middleware enum (camelCase): csv, jsonModel, json, serverScript, clientScript, moduleScript, pluginScript, localScript, legacyScript, project, rbxm, rbxmx, toml, text, yaml, ignore

2. Create schemas/meta.template.schema.json

Source: src/snapshot_middleware/meta_file.rs. Combined schema for *.meta.json5 and init.meta.json5.

All fields optional: $schema, id, ignoreUnknownInstances, properties, attributes, className

3. Create schemas/model.template.schema.json

Source: src/snapshot_middleware/json_model.rs lines 171-202.

className required. Optional: $schema, name, id, children (recursive), properties, attributes

4. Update GenerateSchemaPlugin.js

  • Also read and process meta.template.schema.json and model.template.schema.json
  • Inject class names enum into model schema's className field
  • Write all three to dist/

Atlas Rebrand

5. package.json changes

Field Old New
name vscode-rojo vscode-atlas
displayName Rojo - Roblox Studio Sync Atlas - Roblox Studio Sync
description Rojo for VS Code Atlas for VS Code
repository rojo-rbx/vscode-rojo UserGeneratedLLC/vscode-rojo
publisher evaera TBD (keep or change)
command ID vscode-rojo.openMenu vscode-atlas.openMenu
command category Rojo Atlas
config title Rojo Atlas
config keys rojo.* atlas.*
activation onCommand:vscode-rojo.openMenu onCommand:vscode-atlas.openMenu
activation workspaceContains:*.project.json also add *.project.json5
jsonValidation only *.project.json/jsonc Replace with 3 .json entries only: *.project.json, *.meta.json, *.model.json (drop stale .jsonc; .json5 handled by json5.schemas)

JSON5 schema registration via Better JSON5. VS Code's built-in jsonValidation only works for json/jsonc language modes. Since we target the Better JSON5 extension (which has its own json5.schemas setting with full IntelliSense/validation), we register .json5 schemas via configurationDefaults instead:

"configurationDefaults": {
  "json5.schemas": [
    { "fileMatch": ["*.project.json5"], "url": "./dist/project.schema.json" },
    { "fileMatch": ["*.meta.json5"], "url": "./dist/meta.schema.json" },
    { "fileMatch": ["*.model.json5"], "url": "./dist/model.schema.json" }
  ]
}

The jsonValidation entries only cover the .json variants (which use VS Code's native JSON language service). No jsonc file association overrides needed.

Bundle Better JSON5. Add extensionPack to package.json so it installs alongside Atlas (users can disable independently):

"extensionPack": [
  "BlueGlassBlock.better-json5",
  "JohnnyMorganz.luau-lsp",
  "JohnnyMorganz.stylua"
]

Conflict check with original Rojo extension. VS Code has no manifest-level incompatibility flag, so add a runtime check in extension.ts on activation: if vscode.extensions.getExtension("evaera.vscode-rojo") returns non-null, show a warning message asking the user to disable it (both extensions register the same commands/schemas and will conflict).

6. TypeScript string replacements (user-facing text only, not variable names)

Command IDs (in all TS files): "vscode-rojo.*" -> "vscode-atlas.*"

Affected files:

  • extension.ts -- button command, console log, status messages
  • updateButton.ts -- button commands
  • commands/openMenu.ts -- registerCommand, executeCommand
  • commands/serveRecent.ts -- registerCommand, executeCommand
  • commands/stopAll.ts -- registerCommand
  • configuration.ts -- config section name "rojo" -> "atlas"

User-facing "Rojo" -> "Atlas" in string literals:

  • extension.ts: button text, info messages
  • openMenu.ts: menu labels, error messages, info messages
  • serveProject.ts: terminal title
  • buildProject.ts: error/info messages
  • installPlugin.ts: error/info messages
  • installRojo.ts: success/error messages (note: the actual rojo CLI binary name stays the same -- only display text changes)

Links:

  • rojo.space/docs/v7/ -> keep as-is (still valid Rojo docs) OR update if there's a new docs URL
  • discord.gg/wH5ncNS -> keep as-is (same community)
  • extension/evaera.vscode-rojo -> update extension ID reference

**default.project.json** references -> default.project.json5 (openMenu.ts lines 401-404)

**findProjectFiles.ts** line 77: also match .project.json5

7. README.md

Rebrand all "Rojo" display text to "Atlas", update GitHub link to UserGeneratedLLC/vscode-rojo, mention .project.json5 support.