Инструмент командной строки для изменения XML в папке .idea в проектах JetBrains - PullRequest
0 голосов
/ 04 мая 2018

Я использую WebStorm и другие проекты JetBrains.

Я ищу инструмент командной строки, который может изменить настройки для нового проекта, чтобы мне не пришлось делать это вручную.

Например, я никогда не хочу, чтобы проверка орфографии была активной, и я считаю, что это XML, который контролирует проверку орфографии:

<component name="InspectionProjectProfileManager">
  <profile version="1.0">
    <option name="myName" value="Project Default" />
    <inspection_tool class="SpellCheckingInspection" enabled="true" level="TYPO" enabled_by_default="false">
      <option name="processCode" value="true" />
      <option name="processLiterals" value="true" />
      <option name="processComments" value="true" />
    </inspection_tool>
  </profile>
</component>

Кто-нибудь знает инструмент JetBrains, который может это сделать, или я сам должен что-то написать?

Правильный способ сделать это заключается в том, чтобы каждый пользователь сам изменял Настройки по умолчанию для продуктов JetBrains.

https://www.jetbrains.com/help/webstorm/accessing-default-settings.html

Однако мне все еще любопытно, есть ли хороший способ использовать / создать командную строку для инструмента для изменения настроек проекта.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Если вы знаете XPath, другой вариант - использовать xmlstarlet . В частности, команда ed (правка) .

Пример командной строки ...

xmlstarlet ed -u "//inspection_tool[@class='SpellCheckingInspection']/@enabled" -v "false" some_settings_file.xml

результаты ...

<component name="InspectionProjectProfileManager">
  <profile version="1.0">
    <option name="myName" value="Project Default"/>
    <inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
      <option name="processCode" value="true"/>
      <option name="processLiterals" value="true"/>
      <option name="processComments" value="true"/>
    </inspection_tool>
  </profile>
</component>

Вы также можете редактировать файл на месте, добавив -L (xmlstarlet ed -L ...).

0 голосов
/ 16 мая 2018

Это действительно должен быть инструмент командной строки? Почему бы вам просто не использовать бортовые средства IDEA?

Решение A: Прямые / импортные инспекции напрямую

Войдите в диалог проверок в настройках. Затем экспортируйте, импортируйте, продублируйте (со специальным именем, например, «MyCompany default») все параметры проверки в / из XML.

Inspections settings ex-/import

Решение B: Ex- / import значения по умолчанию для проекта

Выберите «Файл» - «Другие настройки» - «Настройки по умолчанию», затем отключите проверку правописания (как на скриншоте выше) и сохраните.

Теперь просто экспортируйте все (или ваше собственное подмножество) настройки по умолчанию в импортируемый файл JAR через «Файл» - «Экспорт настроек». Преимущество заключается в том, что вы можете связать пакет настроек по умолчанию, например, стиль кода, цвета, кнопки панели инструментов, шаблоны файлов и многое другое. Минимальные потребности в экспорте: «Проект по умолчанию» и «Профили (схемы) проверки».

Project settings ex-/import

0 голосов
/ 15 мая 2018

Я нашел ваш вопрос довольно интересным. Здесь я разработал пример сценария управления для вашего XML-файла.

Сценарий использует ElementTree модуль, который анализирует XML-файлы и легко обращается к их объектам (данным) для чтения или записи изменений в нем.

Также в скрипте есть справка и параметры в качестве примеров, которые вы можете изменить, чтобы получить то, что вы хотите.

Если у вас есть linux или (cygwin | babun) в windows, вы можете сделать собственную команду (псевдоним) в вашем bashrc, чтобы сделать ее еще проще и сделать ее похожей на CLI.

Сценарий

#/usr/bin/python

import sys
import getopt
import xml.etree.ElementTree as ET
tree = ET.parse('properties.xml')
root = tree.getroot()
propFile='properties.xml'

def procComments (newProp) :
    for prop in root.findall("./profile/inspection_tool/option/[@name='processComments']"):
        prop.set('value',newProp) 
    tree.write(propFile)
    print 'The new value of processComments is: '  + prop.get('value')


def procLits (newProp) :
    for prop in root.findall("./profile/inspection_tool/option/[@name='processLiterals']"):
        prop.set('value',newProp) 
    tree.write(propFile)
    print 'The new value of processLiterals is: ' + prop.get('value')

def usage() :
        print '-h display help'
        print 'Usage: python script.py <option> <value>'
        print 'Options: '
        print '     -c processComments property'
        print '     -l processLiterals property'
        print 'Values: may be true | false'
try:
    opts, args = getopt.getopt(sys.argv[1:], 'c:l:h')
except getopt.GetoptError:
    usage()
    sys.exit(2)

for opt, arg in opts:
    if opt in ('-h', '--help'):
        usage()
        sys.exit(2)
    elif opt in ('-c''--processComments'):

        userProp=sys.argv[2]
        procComments(userProp)
    elif opt in ('-l', '--processLiterals'):
        userProp=sys.argv[2]
        procLits(userProp)
    else:
        usage()
        sys.exit(2)

Входной файл (properties.xml)

<component name="InspectionProjectProfileManager">
  <profile version="1.0">
    <option name="myName" value="Project Default" />
    <inspection_tool class="SpellCheckingInspection" enabled="true" enabled_by_default="false" level="TYPO">
      <option name="processCode" value="true" />
      <option name="processLiterals" value="true" />
      <option name="processComments" value="true" />
    </inspection_tool>
  </profile>

Пример использования:

mortiz@alberta:~/.../cli_for_mills_xml$ python mills_parse_xml.py -c false
The new value of processComments is: false

Результат:

mortiz@alberta:~/Documents/projects/python/cli_for_mills_xml$ cat properties.xml
<component name="InspectionProjectProfileManager">
  <profile version="1.0">
    <option name="myName" value="Project Default" />
    <inspection_tool class="SpellCheckingInspection" enabled="true" enabled_by_default="false" level="TYPO">
      <option name="processCode" value="true" />
      <option name="processLiterals" value="true" />
      <option name="processComments" value="false" />
    </inspection_tool>
  </profile>
</component>
...