theBenForce / vscode-appsync-resolver-autocomplete

Adds autocomplete functionality to vscode when editing AWS AppSync resolver vtl files.
23 stars 0 forks source link

Feature Request: vtl tag #9

Open andrestone opened 4 years ago

andrestone commented 4 years ago

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"
}
theBenForce commented 4 years ago

@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.

andrestone commented 4 years ago

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

theBenForce commented 4 years ago

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!