vscode-appsync-resolver-autocomplete icon indicating copy to clipboard operation
vscode-appsync-resolver-autocomplete copied to clipboard

Feature Request: vtl tag

Open andrestone opened this issue 5 years ago • 3 comments

Hi!

It would be nice to be able to get the same code completion and syntax highlighting using a vtl tag on a template string like so:

// ts / js
const resolver = vtl`
#if($ctx.args.id)
  "true"
#else 
  "false"
#end
`;

I know this extension is for code completion only, but I'm assuming it uses the "velocity" language token / reference from another extension to be activated. Is it true?

I'm wondering what minimal work could be done in order to "enable" the language inside the string literal so both extensions would work.

Cheers!

EDIT:

How feasible is this?

package.json

    "contributions": {
      ...
      "grammar" : {
        "injectTo": [
          "source.js",
          "source.ts",
        ],
        "scopeName": "inline.velocity",
        "path": "./syntaxes/velocity.inline.json",
        "embeddedLanguages": {
          "meta.embedded.block.velocity": "velocity"
        }
      }
      ...

// syntaxes/velocity.inline.json

{
  "fileTypes": ["js", "ts"],
  "injectionSelector": "L:source -string -comment",
  "patterns": [
    {
      "name": "taggedTemplates",
      "contentName": "meta.embedded.block.velocity",
      "begin": "(`)(velocity|vtl)",
      "beginCaptures": {
        "1": {
          "name": "punctuation.definition.string.template.begin.js"
        },
        "2": {
          "name": "comment.line.velocity.js"
        }
      },
      "end": "`",
      "endCaptures": {
        "0": {
          "name": "punctuation.definition.string.template.end.js"
        }
      },
      "patterns": [
        { "include": "source.velocity" }
      ]
    }
  ],
  "scopeName": "inline.velocity"
}

andrestone avatar Aug 26 '20 09:08 andrestone

@andrestone Thanks for suggesting this, and providing details on how to implement it. I'll take a look and get an update pushed out ASAP.

theBenForce avatar Aug 26 '20 16:08 theBenForce

It's working here, but it depends on the name of the scope of the language extension.

For the one by "sodatea":

"embeddedLanguages": {
						"text.velocity": "velocity"
				}

I can open the PR if you confirm this is the extension you use.

One thing I couldn't fix is the autocompletion support (only the syntax is working). There's a related open issue: https://github.com/microsoft/vscode/issues/98621

andrestone avatar Aug 26 '20 17:08 andrestone

I use the extension by quidgest. If you create a PR I'll verify that it works with that extension too.

Thanks again for all the work!

theBenForce avatar Aug 28 '20 14:08 theBenForce