O Looker lançou um novo analisador de sintaxe líquida no Looker 21.6. O novo analisador de sintaxe de líquido do Looker é usado durante a validação do LookML e expõe erros de sintaxe do Liquid. Esse analisador tem como objetivo evitar falhas silenciosas, facilitar a depuração da sintaxe de líquido, melhorar a segurança de referências de atributo do usuário e o armazenamento em cache dos resultados, além de detectar referências de campo dinâmico de forma mais eficaz. Como esse analisador introduz novas verificações de sintaxe Liquid válida, é possível que você veja novas mensagens de validação para a sintaxe líquida existente.
Para as versões do Looker anteriores à 22.2, o analisador era controlado por um recurso legado chamado Líquido tolerante de sintaxe. Esse recurso legado não afetava o uso do analisador, mas afetava o nível dos erros expostos. Quando o recurso legado Sintaxe de tolerância a sintaxe era ativado, todos os erros eram categorizados como informativos. A partir do Looker 22.2, o recurso Sintaxe de tolerância foi totalmente removido. Consulte a programação da descontinuação de recursos legados para saber mais detalhes.
Com o novo analisador de líquidos, todos os erros são categorizados como avisos, o que pode ter implicações para confirmações de código, dependendo da configuração de Qualidade do código do projeto.
O analisador de líquidos atualmente não renderiza o Fluid em consultas em execução. Fique de olho nas próximas notas da versão.
Como interpretar avisos de sintaxe de líquido
Os novos avisos de sintaxe de líquidos são detalhados e incluem explicitamente as seguintes informações:
- A entrada problemática seguida pela linha e pelo número de índice da entrada dentro do bloco Liquid
- Um link para o arquivo de visualização do LookML relevante e a linha de código
Veja o exemplo do erro a seguir:
Error parsing liquid: Liquid parse exception: parser error "extraneous input '{{' expecting {Str, '(', '[', DoubleNum, LongNum, 'capture', 'endcapture', 'comment' 'endcomment', RawStart, 'if ', 'elsif', 'endif', 'unless ', 'endunless', 'else ', 'contains', 'case', 'endcase', 'when', 'cycle', 'for', 'endfor', 'in ', 'and', 'or' 'tablerow', 'endtablerow', 'assign', 'true', 'false', Nil, 'include', 'with ', 'empty','blank', EndId, Id, RawEnd}" on line 1, index 16 view_name.view:60 (project_name:view_name)
Esse erro é baseado na definição da dimensão foo
, que começa na linha 60 do arquivo LookML:
dimension: foo { type: number sql: ${TABLE}.bar ;; html: moonrise-replace3cb2e10366044055a89c7693d4c7c8e4moonrise-replace {{var}} ;; }
Esse aviso indica que a entrada {{moonrise-replacea86980a872084a89bdbe62adc04e4fc0moonrise-replace
está sendo usada indevidamente nas tags moonrise-replacedca36cd414d141f7aaeef4c7312e50ebmoonrise-replacemoonrise-replace930f03c69885481f9b22392cf4c357bdmoonrise-replacemoonrise-replacef00d6bef8ee54d74a194cd8022084047moonrise-replace
na linha 1 e no índice 16 do bloco Liquid na linha 60 de view_name
. O Fluid tem regras para entradas permitidas nesse contexto, e essas entradas são listadas da seguinte maneira:
{Str ,'(' ,'[' , DoubleNum , LongNum ,'capture' ,'endcapture' ,'comment' ,'endcomment' ,RawStart ,'if' ,'elsif' ,'endif' ,'unless' ,'endunless' ,'else' ,'contains' 'case' , 'endcase' ,'when' , 'cycle' ,'for' ,'endfor' ,'in' ,'and' ,'or' ,'tablerow' ,'endtablerow' ,'assign' ,'true' ,'false' , Nil,'include' ,'with' ,'empty' ,'blank' , EndId, Id, RawEnd}.
Se o moonrise-replace8127a18d3247467e96a06b221bb27944moonrise-replace{{...}}
ao redor de value
for removido, o Liquid deve ser analisado com sucesso.
Embora os novos avisos sigam um padrão estrutural, haverá variações nos detalhes da mensagem. Veja a seguir exemplos de outras variações, bem como alguns indicadores de alto nível para resolvê-los.
Exemplo 1
Aviso:
Error parsing liquid: Liquid parse exception: lexer error \ "token recognition error at: '(token)'\" on line x, index y
Isso pode ser gerado quando um token inesperado, como #
, é usado:
dimension: foo { type: number sql: ${TABLE}.bar ;; html: {% assign var = #value %} {{var}} ;; }
Remover o token inesperado, #
neste caso, deve resolver o aviso.
Exemplo 2
Aviso:
Error parsing liquid: Liquid parse exception: parser error \ "mismatched input (input)|' expecting {TagEnd, '.', NEq, '==', '>=', '>', '<=', '<', '[', '?','contains', 'and', 'or'}\" on line x, index y
Isso pode ser gerado quando as funções estão encadeadas com o token |
dentro de um condicional if
:
dimension: foo { type: number sql: ${TABLE}.bar ;; html: {% dynamic if 20 |divided_by(7) |times(1.0) >= 2 %} hello world {% dynamic endif %} ;; }
Atribuir a saída da cadeia de funções a uma variável e incluir essa variável no condicional if
resolve o aviso.
Exemplo 3
Aviso:
Error parsing liquid: Liquid parse exception: parser error "missing '(character)' at '%}'" on line x, index y
Esse aviso pode ser gerado quando um caractere necessário está ausente, como o parêntese de fechamento na linha {% assign var = (true and false %}
no exemplo a seguir:
dimension: foo { type: number sql: ${TABLE}.bar ;; html: {% assign var = (true and false %} {{var}} ;; }
Adicionar o caractere necessário, um parêntese de fechamento )
nesse caso, precisa resolver o aviso.