chocojunkie
chocojunkie

Reputation: 575

How to apply multiple transforms to snippet variable

I'm in a file called event-list.tsx, and I'm trying to create a snippet that writes the following code:

const EventList: FC = () => {
  return <div>
    
  </div>;
};

export default EventList;

Thus far, in typescriptreact.json I've written the following snippet setting, which results in awkward-looking code (it puts out const event-list rather than const EventList

"react arrow func component": {
    "prefix": "rafce",
    "body": [
      "const ${TM_FILENAME_BASE}: FC = () => {",
      "  return <div>",
      "    ",
      "  </div>;",
      "};",
      "",
      "export default ${TM_FILENAME_BASE};",
      ""
    ]
  },

I know how to remove the hyphen from the snippet: ${TM_FILENAME_BASE/-//} I also figured out how to capitalize the first character: ${TM_FILENAME_BASE/(^.)/${1:/upcase}/}

But I can't figure out how to apply all three of the changes I want. I know the regular expression needed to capitalize every character that comes after a hyphen (a positive lookbehind), but I don't know how to apply it here. There is nothing in the documentation chapter implying the possibility to chain multiple transforms onto each other.

Upvotes: 0

Views: 750

Answers (2)

Mark
Mark

Reputation: 182141

"${TM_FILENAME_BASE/(\\w+)-?/${1:/capitalize}/g}",

(\\w+)-? : You only need one capture group if you use /capitalize.

The hyphens are removed by virtue of matching them (-?) but not including them in the output.

The g flag is necessary to keep matching every (\\w+)-? instance and perform a transform for each.

And since you are reusing an earlier transform you can simplify the whole thing like this:

"react arrow func component": {
  "prefix": "rafce",
  "body": [
    "const ${1:${TM_FILENAME_BASE/(\\w*)-?/${1:/capitalize}/g}}: FC = () => {",
    "  return <div>",
    "    ",
    "  </div>;",
    "};",
    "",
    "export default $1;",
    ""
  ]
},

Note that

${1:${TM_FILENAME_BASE/(\\w*)-?/${1:/capitalize}/g}}

stores the result of that transform in variable $1 - which can simply be used later (or earlier) by itself to output the same result!

Upvotes: 1

rioV8
rioV8

Reputation: 28763

Try the following global regex

${TM_FILENAME_BASE/(.)([^-]*)-?/${1:/upcase}${2}/g}

Find a part before a - and Upcase the first letter, repeat for the whole string

Upvotes: 2

Related Questions