Возвышенный текст 3 Получить и установить фрагмент Java

Я пытаюсь создать фрагменты для автоматического создания геттеров и сеттеров в Java

Проблема в том, что я не знаю, как разделить строку, взятую из $TM_SELECTED_TEXT

Код должен быть вставлен ниже конструктора

После того, как я выделю текст, это выглядит как это имя строки

Вот код, я пропускаю разделенную строку и вставку кода в конструктор, потому что я понятия не имею, как это сделать

<snippet>
  <content><![CDATA[
    public void set$TM_SELECTED_TEXT($TM_SELECTED_TEXT $TM_SELECTED_TEXT) {
      this.$TM_SELECTED_TEXT = $TM_SELECTED_TEXT;
    }

    public $TM_SELECTED_TEXT get$TM_SELECTED_TEXT {
      return this.$TM_SELECTED_TEXT;
    }
  ]]></content>
  <tabTrigger>getter_setter</tabTrigger>
  <scope>source.java</scope>
</snippet>

Я также хотел бы знать, как изменить первую букву переменной на верхний регистр, чтобы она выглядела как getName и setName вместо setname и getname*

1 ответ

Вы можете разделить строку во фрагменте, используя регулярное выражение. Но я советую создать плагин вместо сниппета. Вы можете использовать функцию python split () в sublime plugin и capitalize(), чтобы изменить первую букву имени переменной в верхний регистр.

Для доступа к выделению в плагине используйте эту конструкцию:

self.view.sel()[0]

чтобы вставить код получения или использования кода:

self.view.replace(edit, region, content)

или же:

self.view.insert(edit, position, content)

Этот код работает для меня:

import sublime, sublime_plugin

class javamagicCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        snippet_code = ''' public void set$TM_SELECTED_PART1($TM_SELECTED_PART1 $TM_SELECTED_PART2) {
      this.$TM_SELECTED_PART1 = $TM_SELECTED_PART1;
    }'''
        new_content = ''

        for selection in self.view.sel():
            selection_content = self.view.substr(selection)
            if selection_content.find('.') > 0:
                parts = selection_content.split('.')
                new_content = snippet_code.replace('$TM_SELECTED_PART1', parts[0])
                new_content = new_content.replace('$TM_SELECTED_PART2', parts[1])
                self.view.insert(edit, selection.begin(), new_content)
            else:
                sublime.status_message('wrong selection') # statusline message
                # sublime.message_dialog('wrong selection') # popup message

        for selection in self.view.sel():
            self.view.erase(edit, selection)

        #print('done') # debug output to console
Другие вопросы по тегам