2015-10-22 3 views
1

Есть ли способ отключить правило Codenarc NoDef для действий контроллера Grails? Правило является хорошей практикой в ​​целом, но поскольку некоторые действия возвращают значение, а некоторые - нет, мы обычно используем def для поддержки всех вариантов. Я немного оглянулся, чтобы посмотреть, можно ли отключить это правило для действий контроллера, но при этом пуст. Кто-нибудь знает?Grails: отключить правило Codenarc NoDef для действий контроллера

+2

«мы обычно используем Защиту поддерживать все варианты» - Учтите что, если тип метода возвращение 'void', на HTTPS : //github.com/grails/grails-core/blob/bd7741b646e13da598926cf118fad0221590e567/grails-plugin-controllers/src/main/groovy/org/grails/compiler/web/ControllerActionTransformer.java#L303 он не будет настроен как контроллер действие. Я знаю, что это не то, о чем вы просите, но хотите указать на это, если это может оказаться полезным. –

ответ

0

Если вы используете codenarc плагин, то я считаю, вы должны быть в состоянии отключить некоторые правила в наборе файлов правил codenarc как уже упоминалось в этом блоге

http://www.tothenew.com/blog/grails-clean-code-configure-codenarc-plugin/

+0

Вы не можете настроить это правило Codenarc по имени файла. Проверьте @ j4y ответ. – mathifonseca

1

Я прочитал сообщение в блоге и попытался doNotApplyToClassNames, но это не сработало.

Из документации:

NoDef Правила

С CodeNarc 0,22

ПРИМЕЧАНИЕ: Это правило применяется к текстовому содержимому файла, а не определенного класса, поэтому он не поддерживайте свойства configureToClassNames и doNotApplyToClassNames.

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

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

1

Вы не может исключить конкретно действия контроллера, и вы не можете исключить по имени класса либо (используя свойство doNotApplyToClassNames), так как правило, применяется файловом уровне, а не класс.

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

NoDef.doNotApplyToFilesMatching = /.*Controller.groovy/ 

Я также рекомендую исключить Services и grailsApplication инъекции из правила, поскольку это не мешает мне иметь DEFS там. Например:

class SomeService { 
    def otherService 
    def grailsApplication 
} 

Конфигурация правила для этого должно быть:

NoDef.excludeRegex = /(.+Service|.+Controller|grailsApplication)/ 
Смежные вопросы