Verificador de estilo de iRules

Cole um iRule e leia-o segundo o iRules Style Guide do DevCentral: indentação, chaves, comentários, expressões entre chaves, switch --, prioridade de eventos, nomes static:: e mais, além de uma verificação de sintaxe Tcl 8.4 real. Analisado, nunca executado. Local, sem rede.

Redes
Experimente

O Tcl 8.4 consegue carregá-lo. 0 erro, 7 alertas, 3 notas.

12 linhas; a mais longa tem 73 caracteres.

Eventos e prioridades

  • HTTP_REQUEST linha 1 sem prioridade

A regra, com as linhas marcadas

when HTTP_REQUEST {
⇥ if {[HTTP::uri] eq "/old"} { HTTP::redirect "https://[HTTP::host]/new" }
set n [expr $count + 1] ;# bump
switch [HTTP::path] {
"/a" { pool a_pool }
default { pool web_pool }
}
if { $a and $b } {
#log local0. "debug"
set static::flag 1
}
}

Apontamentos

  1. alertaR16linha 1Prioridade do evento
    when HTTP_REQUEST {

    O evento HTTP_REQUEST não tem prioridade. O guia pede uma em todo evento; o padrão é 500.

  2. alertaE1linha 2Indentação
    if {[HTTP::uri] eq "/old"} { HTTP::redirect "https://[HTTP::host]/new" }

    Um caractere de tabulação. O guia pede indentação de 4 espaços e nenhuma tabulação.

  3. alertaR8linha 2Nada de if em uma linha
    if {[HTTP::uri] eq "/old"} { HTTP::redirect "https://[HTTP::host]/new" }

    Um if numa linha só. Distribua-o em várias linhas, mesmo para um log de debug.

  4. alertaR6linha 3Comentários
    set n [expr $count + 1] ;# bump

    Um comentário no fim da linha. Coloque comentários na própria linha, na indentação do código.

  5. alertaR12linha 3Expressões entre chaves
    set n [expr $count + 1] ;# bump

    Uma expressão sem chaves: $count + 1. Uma expressão sem chaves é substituída duas vezes (risco de injeção, F5 K57410758) e não pode ser compilada antes; coloque-a entre chaves.

  6. alertaR15linha 4Terminador de opções --
    switch [HTTP::path] {

    switch sem -- antes do valor. Um valor que começa com hífen seria lido como opção (F5 K15650046).

  7. alertaR10linha 8Operadores lógicos do Tcl
    if { $a and $b } {

    Um dos operadores em palavra da F5 (and, or, not). Use os operadores do Tcl &&, || e !, com parênteses para deixar o agrupamento claro.

  8. notaR14linha 8Nomes de variáveis entre chaves
    if { $a and $b } {

    Uma variável numa expressão escrita sem chaves em volta do nome. O guia escreve o nome entre chaves depois do cifrão.

  9. notaR20linha 9Nada de código comentado
    #log local0. "debug"

    Código comentado. Remova-o antes de a regra ir para produção.

  10. notaR18linha 10Nomes static:: com prefixo
    set static::flag 1

    static::flag não tem prefixo. Coloque prefixo nos nomes static::, por exemplo o nome da regra, para que duas regras não colidam.

O verificador lê estrutura e texto, e nunca executa a regra. Onde não pode ter certeza (por exemplo, se uma linha começando com cerquilha é código ou um comentário sem o espaço) o apontamento é uma nota, não um alerta. D1 e D2 vêm dos comentários do guia, e os caracteres são nomeados pelo Unicode Character Database 18.0.0.

Endpoint da APIGEThttps://ronutz.com/api/v1/f5-irules-style-checkerDocumentado, não servido. Abre a especificação.

Referências

Aparece nestes fluxos de trabalho