Sno Station
Sno Station is your agents' workstation: open-source software that turns the AI agents you already run into one squad on your own machine. Two heads are better than one, and they get better with every
Add Groovy, Grails and GSP language support to Visual Studio Code and Cursor
Translation pending
AI summary · README
PluginsTypeScriptGitHub @code-groovySelf-installOwner unconfirmed
Paste into Claude or ChatGPT for installation instructions suited to your environment.
Have you tried it? One tap is enough. No sign-in needed.
Loading comments.
Checking sign-in status.
Loading the full README. The saved excerpt is shown below.
Groovy, Grails and GSP language support for Visual Studio Code and Cursor.
• Go to Definition (Ctrl/Cmd + click, or F12) for Groovy classes, methods, services and inherited methods, resolving both workspace sources and the Gradle/Maven JAR classpath — including source JARs when they are available locally.
• TagLib navigation across files: jump from catalogTagLib.method or namespace.method in Groovy, and from or ns.method in GSP, straight to the TagLib closure that defines it. Works for Groovy inside ${...} and blocks too.Read the full README ↗Groovy, Grails and GSP language support for Visual Studio Code and Cursor.
Ctrl/Cmd + click, or F12) for Groovy classes, methods, services and inherited methods, resolving both workspace sources and the Gradle/Maven JAR classpath — including source JARs when they are available locally.catalogTagLib.method or namespace.method in Groovy, and from <ns:tag> or ns.method in GSP, straight to the TagLib closure that defines it. Works for Groovy inside ${...} and <%...%> blocks too.Ctrl/Cmd + click on template=, src= or url= in g:render and asset:* tags. The full attribute value is underlined, and .scss sources are preferred over compiled .css.Ctrl/Cmd + click on the controller, action or view of createLink, redirect, render, <g:link>, <g:form> and similar calls and tags opens the controller class, the action method (including actions inherited from a base controller) or the GSP view. Without a controller, the current controller is used — the controller file itself, or the views/<controller>/ folder of a GSP.def myTag = { ... }) and methods with generic return types such as Map or List<Map>.Pet stay above longer JAR names such as PetProfileDTO.receiver.) following the same Grails artifact hierarchy used by Go to Definition.g: and Asset Pipeline asset: tags, with hover documentation linking to the legacy GSP reference.namespace: or namespace., inferring self-closing versus body tags from whether the closure calls body().F2) for identifiers within the current Groovy file, skipping comments and strings.identifier / number is treated as division, while = /regex/ still highlights as a slashy string.[ and ]..gsp, configured so Emmet does not hijack g.each or your own namespace.method completions.bootRun/run with JDWP on the app JVM, or attach to a JVM already listening (default port 5005). Breakpoints in .groovy files are supported (uses the bundled Java debug extensions).| Command | ID | Keybinding |
|---|---|---|
| Debug Groovy / Grails Application | cgroovy.debugApp | — |
| Organize imports | cgroovy.organizeImports | Cmd+Shift+O / Ctrl+Shift+O |
| Organize dependences | cgroovy.organizeDependences | Cmd+Shift+D / Ctrl+Shift+D |
| Rebuild Code Groovy Index | cgroovy.rebuildIndex | — |
| Show Code Groovy Index Output | cgroovy.showIndexOutput | — |
Keybindings are active only while a .groovy or .gsp editor has focus.
| Setting | Default | Description |
|---|---|---|
codeGroovy.debug.attachTimeoutMs | 600000 | How long to wait for Gradle bootRun and the app JVM to open a JDWP port before giving up. |
codeGroovy.debug.gradleConsole | rich | Gradle console mode in the Groovy Debug terminal (rich = colors, plain = no ANSI). |
codeGroovy.index.maxSourceFiles | 0 | Maximum workspace .groovy / .java files to index when Grails module detection is not in use. 0 means no limit. |
codeGroovy.modules | ["domain", "web", "api"] | Gradle submodules to index when a settings.gradle is found. |
codeGroovy.importOrder.warnings | true | Warn in Problems when imports are out of order (same order as Organize imports). Set false to turn off those warnings only. |
Requires the Java extensions listed under Requirements (installed as dependencies). Code Groovy starts or attaches to the JVM; Debugger for Java owns stepping, variables and the call stack.
.groovy source../gradlew :web:bootRun in a Grails multi-module repo (bootRun at the root for a single module, run for Micronaut/plain Gradle), injects JDWP on the app JavaExec, waits for Listening for transport dt_socket, then attaches. Gradle output stays in the Groovy Debug integrated terminal (ANSI colors via --console=rich by default). A progress notification and status bar follow Gradle tasks (:web:compileGroovy → debug port → application running).5005).When the debugger stops in a Gradle copy under bin/default (common in Grails multi-module projects), Code Groovy remaps the stack frame to the matching grails-app / src file you edit.
Hover and the Watch view evaluate Grails implicits as Java (GrailsWebRequest.lookup().getParams(), params.id → .get("id")) so they work on Groovy stack frames. params / session / request / flash are also injected at the top of Locals when available.
Optional launch.json fields: port, task, module, gradleArgs, sourcePaths, projectName, serverUrl, openBrowserOnReady. For attach, use hostName and port. projectName is the Java project Debugger for Java uses to evaluate expressions (auto-detected as the Gradle module, usually web). Source directories under grails-app and src/main/groovy are detected automatically.
While a Groovy or GSP editor is focused, Cmd/Ctrl+Shift+D is bound to Organize dependences, not the Run and Debug view — use the Command Palette or rebind the key.
Visual Studio Code 1.74.0 or newer, or any recent Cursor build.
The extension declares these dependencies in package.json (Marketplace / Cursor install them together with Code Groovy):
vscode.html-language-features) — built into VS Code/Cursor; GSP/Emmet supportredhat.java)vscjava.vscode-java-debug) — required for Groovy/Grails debug (breakpoints, variables, step)Syntax highlighting, snippets and GSP support work once Code Groovy is installed. Auto-import and go-to-definition against third-party libraries additionally require a populated Gradle or Maven cache on the machine. Resolution is more precise when source JARs have been downloaded.
.gsp are not supported.Cmd/Ctrl+Shift+O) and Run and Debug view (Cmd/Ctrl+Shift+D) while a Groovy or GSP file is focused. Rebind them in Keyboard Shortcuts if you prefer the defaults.codeGroovy.modules, or cap it with codeGroovy.index.maxSourceFiles.git clone https://github.com/code-groovy/code-groovy.git
cd code-groovy
npm install
npm run compile # or: npm run watch
Press F5 in VS Code to launch an Extension Development Host with the extension loaded.
npm run test:unit # unit tests (fast, no editor required)
npm test # unit tests + integration tests in a VS Code instance
npx vsce package # build a .vsix
This is an open source project open to anyone, and contributions are extremely welcome. Read the contributing guide to set up the project and open your first pull request.
Report any problems you face on the issue tracker, and ask questions in Discussions.
Licensed under the MIT License.
Lots of help from vscode-sort-lines.
Groovy symbol support based on vscode-groovy.