2014-01-04 3 views
9

Я следующий фрагмент кода:Perltidy Автоформат hashref в качестве параметра

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 для его форматирования, как в первом примере? (Забегая форматирование для блока не вариант, я хочу форматировать каждый больше hashref в этот формат, поэтому он является более компактным и читаемым.)

Мой 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 

Если удалить '{}' и передать параметры в виде списка, он делает правильную вещь. Но я должен пройти хэш.

Или вы могли бы порекомендовать разумный способ форматирования такого кода?

ответ

1

Ниже, кажется, решить данную проблему и работает для меня:

# 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 
5

Как насчет этой опции?

perltidy -lp -vt=2 -vtc=1 

, который дает

my $obj = $class->new({ schema => $schema, 
         reminder => $reminder, 
         action => $action, 
         dt  => $dt, 
         }); 

, который здесь http://perltidy.sourceforge.net/perltidy.html#line_break_control

Закрытие маркеры (для блочных скобок), за исключением контролируются -vtc = п, или --vertical-tightness- замыкание = n, где

-vtc = 0 всегда прерывать линию перед закрывающим токеном (по умолчанию), -vtc = 1 не прерываются перед закрывающим токеном, который следует за точкой с запятой или другим закрывающим токеном и не находится в среде списка. -vtc = 2 никогда не прерывается перед закрывающим токеном.

EDIT Я подозреваю, что вы пропали без вести опции -LP (выстраиваться параметры), которые также необходимы для вертикальной герметичности (-vt и -vtc)

+0

Ну, пока ничего лучше не придет, это нужно будет сделать. Благодарю. – Davs