Perltidy автоформат в качестве параметра
У меня есть следующий фрагмент кода:
my $obj = $class->new({
schema => $schema,
reminder => $reminder,
action => $action,
dt => $dt,
});
Моя проблема в том, что Perltidy пытается отформатировать его во что-то вроде этого:
my $obj = $class->new(
{ schema => $schema,
reminder => $reminder,
action => $action,
dt => $dt,
}
);
Мне не нравится расположение фигурных скобок. Можно ли как-то настроить perltidy для форматирования, как в первом примере? (Пропуск форматирования для блока не вариант. Я хочу отформатировать каждый более длинный хеш-адрес в этот формат, чтобы он был более компактным и читаемым)
Мой perltidyrc до сих пор:
-l=79 # Max line width is 78 cols
-i=4 # Indent level is 4 cols
-ci=4 # Continuation indent is 4 cols
-st # Output to STDOUT
-se # Errors to STDERR
-vt=2 # Maximal vertical tightness
-cti=0 # No extra indentation for closing brackets
-pt=1 # Medium parenthesis tightness
-bt=1 # Medium brace tightness
-sbt=1 # Medium square bracket tightness
-bbt=1 # Medium block brace tightness
-nsfs # No space before semicolons
-nolq # Don't outdent long quoted strings
Если я удалю '{}' и передам параметры в виде списка, то, между прочим, это будет правильно. Но я должен передать хэшреф.
Или вы могли бы порекомендовать разумный способ форматирования такого кода?
2 ответа
Следующее, кажется, решает вышеуказанную проблему и работает для меня:
# perltidy configuration file created Thu Sep 24 15:54:07 2015
# using: -
# I/O control
--standard-error-output # -se
--nostandard-output # -nst
# Basic formatting options
--indent-columns=4 # -i=4 [=default]
--maximum-line-length=140 # -l=140
# Code indentation control
--closing-brace-indentation=0 # -cbi=0 [=default]
--closing-paren-indentation=0 # -cpi=0 [=default]
--closing-square-bracket-indentation=0 # -csbi=0 [=default]
--continuation-indentation=4 # -ci=4
--nooutdent-labels # -nola
--nooutdent-long-quotes # -nolq
# Whitespace control
--block-brace-tightness=1 # -bbt=1
--brace-tightness=1 # -bt=1 [=default]
--paren-tightness=2 # -pt=2
--nospace-for-semicolon # -nsfs
--square-bracket-tightness=1 # -sbt=1 [=default]
--square-bracket-vertical-tightness=0 # -sbvt=0 [=default]
# Comment controls
--ignore-side-comment-lengths # -iscl
--minimum-space-to-comment=2 # -msc=2
--static-side-comment-prefix="#" # -sscp="#"
--static-side-comments # -ssc
# Linebreak controls
--brace-vertical-tightness=0 # -bvt=0 [=default]
--paren-vertical-tightness=0 # -pvt=0 [=default]
--stack-closing-hash-brace # -schb
--stack-closing-paren # -scp
--stack-closing-square-bracket # -scsb
--stack-opening-hash-brace # -sohb
--stack-opening-paren # -sop
--stack-opening-square-bracket # -sosb
--want-break-before="% + - * / x != == >= <= =~ < > | & **= += *= &= <<= &&= -= /= |= + >>= ||= .= %= ^= x=" # -wbb="% + - * / x != == >= <= =~ < > | & **= += *= &= <<= &&= -= /= |= + >>= ||= .= %= ^= x="
# Blank line control
--noblanks-before-comments # -nbbc
Как насчет этого варианта?
perltidy -lp -vt=2 -vtc=1
который дает
my $obj = $class->new( { schema => $schema,
reminder => $reminder,
action => $action,
dt => $dt,
} );
который находится здесь http://perltidy.sourceforge.net/perltidy.html
Закрывающие токены (за исключением фигурных скобок) контролируются с помощью -vtc=n или --vertical-тесомости-закрытия =n, где
-vtc=0 всегда разрывать строку перед закрывающим токеном (по умолчанию), -vtc=1 не разрывать перед закрывающим токеном, за которым следует точка с запятой или другой закрывающий токен, и которого нет в среде списка. -vtc=2 никогда не прерывать перед закрывающим токеном.
РЕДАКТИРОВАТЬ Я подозреваю, что вы пропустили опцию -lp (параметры линии), которая также необходима для вертикальной герметичности (-vt и -vtc)