Есть ли способ обрезать TM_FILENAME, кроме использования TM_FILENAME_BASE? - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь создать фрагмент для файла контейнера-редуктора, в который будет импортирован какой-либо файл реакции с тем же базовым именем.TM_FILENAME_BASE отлично работает для удаления .js из имени файла, но в этом случае расширение моего файла компонента - fun-thing.component.js, и контейнер последует его примеру с расширением fun-thing.container.js.

Регулярное выражение, которое я использую для выбора всего до первого периода, равно ^([^.]+)

  "Redux Container": {
    "prefix": "rc",
    "body": [
      "// @flow",
      "import { connect } from 'react-redux';",
      "import { ${TM_FILENAME/^([^.]+)/${1:/pascalcase}/}Component } from './${TM_FILENAME/^([^.]+)/$1/}.component';",
      "",
      "const mapStateToProps = (state) => ({});",
      "",
      "const mapDispatchToProps = {};",
      "",
      "export const ${TM_FILENAME/^([^.]+)/${1:/pascalcase}/} = connect(",
      "  mapStateToProps,",
      "  mapDispatchToProps",
      ")(${TM_FILENAME/^([^.]+)/${1:/pascalcase}/}Component);"
    ],
    "description": "Creates a normal container for a normal component"
  }

ожидаемое

// @flow
import { connect } from 'react-redux';
import { FunThingComponent } from './fun-thing.component';
...

фактическое

// @flow
import { connect } from 'react-redux';
import { FunThing.container.jsComponent } from './FunThing.container.js.component';
...

AsВы можете видеть, это не пропускает расширения файла.

1 Ответ

0 голосов
/ 01 июля 2019

Обе эти работы:

  "import { ${TM_FILENAME/^([^.]+).*/${1:/pascalcase}/}Component } from './${TM_FILENAME/^([^.]+).*/$1/}.component';",

  "import { ${TM_FILENAME/(.*?)\\..+/${1:/pascalcase}/}Component } from './${TM_FILENAME/(.*?)\\..+/$1/}.component';"

С помощью сниппета vscode, если вы хотите исключить часть переменной, как вы хотите, удалив .component.js из имени файла,тогда эта часть переменной должна быть учтена в регулярном выражении - следовательно, (.*?)\\..+.

В противном случае эта "невидимая" часть переменной просто проходит.

Таким образом, ваше регулярное выражение ^([^.]+) точно захватывало часть имени файла перед первым ., но затем оставшаяся часть переменной «проходила» без изменений.

Вы можете видеть этоболее ясно с этим примером:

"import { ${TM_FILENAME//${1:/pascalcase}/}Component }

, что дает:

import { fun-thing.component.jsComponent }

, поэтому передается все имя файла, хотя ни одно из них не захвачено.

${someVariable/everything To Be Transformed/what To Do To the previous/}

если это не входит во все, что должно быть преобразовано, то ничего не происходит с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...