Observação
Este conteúdo descreve a versão mais recente do CodeQL CLI. Para obter mais informações sobre essa versão, confira https://github.com/github/codeql-cli-binaries/releases.
Para ver os detalhes das opções disponíveis para esse comando em uma versão anterior, execute o comando com a opção --help no terminal.
Sinopse
codeql query compile [--check-only] [--keep-going] [--threads=<num>] [--ram=<MB>] <options>... -- <file>...
codeql query compile [--check-only] [--keep-going] [--threads=<num>] [--ram=<MB>] <options>... -- <file>...
Description
Compile ou verifique o código QL.
Compile uma ou mais consultas. Normalmente, o resultado principal desse comando é que a versão compilada da consulta é gravada em um cache de compilação, em que ela será encontrada quando a consulta for executada posteriormente. Outras opções de saída são usadas principalmente para depuração.
Opções
Opções principais
<file>...
\[Obrigatório] Consultas para compilar. Cada argumento é um dos seguintes:
- Um arquivo .ql a ser compilado.
- Um diretório que será pesquisado recursivamente em busca de arquivos .ql.
- Um arquivo .qls que define determinado conjunto de consultas.
- O nome base de um arquivo .qls "conhecido" exportado por um dos pacotes QL instalados.
-n, --check-only
Basta verificar se a QL é válida e imprimir os erros. Na verdade, não otimize e armazene um plano de consulta. Isso pode ser muito mais rápido do que uma compilação completa.
--[no-]precompile
\[Avançado] Salve cada consulta compilada como um `.qlx` arquivo binário ao lado da fonte `.ql`.
Isso só deve ser usado durante a preparação de um pacote de consultas para distribuição (nesse caso, ele é usado automaticamente por codeql pack publish). Depois que os arquivos .qlx estiverem presentes, os comandos posteriores que executam consultas poderão ignorar as alterações na fonte de QL em favor da versão pré-compilada.
Algumas opções de compilação raramente usadas são incompatíveis com isso e resultarão em um erro em tempo de execução.
Disponível desde v2.12.0.
--[no-]dump-dil
\[Avançado] Imprima a declaração intermediária DIL otimizada na saída padrão durante a compilação.
Quando a saída JSON for selecionada, o DIL será representado como uma matriz de cadeias de caracteres de linha única, com algum nível de encapsulamento para identificar qual consulta está sendo compilada.
-k, --[no-]keep-going
Continue com a compilação mesmo que um erro seja encontrado.
--[no-]dump-ra
\[Avançado] Imprima o plano de consulta RA otimizado na saída padrão durante a compilação.
Quando a saída JSON for selecionada, o RA será representado como uma matriz de cadeias de caracteres de linha única, com algum nível de encapsulamento para identificar qual consulta está sendo compilada.
--format=<fmt>
Selecione o formato de saída, seja text(padrão) ou json.
-j, --threads=<num>
Use esse número de threads para compilar as consultas.
O valor padrão é 1. Você pode transmitir 0 para usar um thread por núcleo no computador ou -N para manter N núcleos não utilizados (com a exceção de que ainda será usado, pelo menos, um thread).
-M, --ram=<MB>
Defina a quantidade total de RAM que o compilador deve ter permissão para usar.
Opções de controle do compilador e variante de QL
--warnings=<mode>
Como lidar com os avisos do compilador de QL. Um destes:
`hide`: suprimir avisos.
`show` _(padrão)_: imprima os avisos, mas continue com a compilação.
`error`: tratar avisos como erros.
--no-debug-info
Não emita as informações de local de origem no RA para depuração.
--[no-]fast-compilation
\[Obsoleto] \[Avançado] Omita etapas de otimização particularmente lentas.
--no-release-compatibility
\[Avançado] Utilize os recursos mais recentes do compilador, ao custo da portabilidade.
De tempos em tempos, novos recursos da linguagem QL e otimizações do avaliador terão suporte do avaliador de QL algumas versões antes de serem habilitadas por padrão no compilador de QL. Isso ajuda a garantir que o desempenho que você experimenta ao desenvolver consultas na versão mais recente do CodeQL possa ser equivalente ao de versões um pouco mais antigas que ainda podem estar em uso para a verificação de código ou as integrações de CI.
Se você não se importa que suas consultas sejam compatíveis com outras versões (anteriores ou posteriores) do CodeQL, às vezes, você pode obter uma pequena quantidade de desempenho extra usando esse sinalizador para habilitar aprimoramentos recentes no compilador antecipadamente.
Nas versões em que não há aprimoramentos recentes a serem habilitados, essa opção silenciosamente não executa nenhuma ação. Portanto, é seguro defini-la de uma vez por todas no arquivo de configuração global do CodeQL.
Disponível desde v2.11.1.
--[no-]local-checking
Só execute verificações iniciais na parte da fonte de QL usada.
--no-metadata-verification
Não verifique a validade dos metadados de consulta inseridos nos comentários do QLDoc.
--compilation-cache-size=<MB>
\[Avançado] Substitui o tamanho máximo padrão para um diretório de cache de compilação.
--fail-on-ambiguous-relation-name
\[Avançado] A compilação falhará se um nome de relação ambíguo for gerado durante a compilação.
Opções para configurar o ambiente de compilação
--search-path=<dir>[:<dir>...]
Uma lista de diretórios nos quais os pacotes QL podem ser encontrados. Cada diretório pode ser um pacote QL (ou um conjunto de pacotes que contém um arquivo .codeqlmanifest.json na raiz) ou o pai imediato de um ou mais desses diretórios.
Se o caminho contiver mais de um diretório, a ordem deles definirá a precedência entre eles: quando for encontrada uma correspondência do nome de um pacote que precisa ser resolvido em mais de uma das árvores do diretório, a primeira fornecida vencerá.
Se você apontar isso para um check-out do repositório do CodeQL de código aberto, isso deverá funcionar durante a consulta de uma das linguagens que se encontram nele.
Se você tiver feito check-out do repositório do CodeQL como um irmão da cadeia de ferramentas CodeQL descompactada, não precisará fornecer essa opção. Nesses diretórios irmãos, sempre será feita a pesquisa por pacotes QL que não podem ser encontrados de outra forma. (Caso esse padrão não funcione, recomendamos fortemente configurar --search-path de uma vez por todas em um arquivo de configuração por usuário).
(Observação: no Windows, o separador de caminho é ;).
--additional-packs=<dir>[:<dir>...]
Se essa lista de diretórios for fornecida, nesses diretórios, será feita a pesquisa de pacotes antes daqueles contidos em --search-path. A ordem entre eles não importa: será indicado um erro se o nome de um pacote for encontrado em dois locais diferentes nessa lista.
Isso será útil se você estiver desenvolvendo temporariamente uma nova versão de um pacote que também aparece no caminho padrão. Por outro lado, não recomendamos substituir essa opção em um arquivo de configuração. Algumas ações internas adicionarão essa opção em tempo real, substituindo qualquer valor configurado.
(Observação: no Windows, o separador de caminho é ;).
--library-path=<dir>[:<dir>...]
\[Avançado] Uma lista opcional de diretórios que serão adicionados ao caminho de pesquisa de importação bruta para bibliotecas QL. Isso só deverá ser usado se você estiver usando bibliotecas QL que não foram empacotadas como pacotes QL.
(Observação: no Windows, o separador de caminho é ;).
--dbscheme=<file>
\[Avançado] Defina explicitamente em relação a qual esquema de banco de dados as consultas devem ser compiladas. Isso só deve ser fornecido pelos chamadores que têm certeza do que estão fazendo.
--compilation-cache=<dir>
\[Avançado] Especifique um diretório adicional para usar como cache de compilação.
--no-default-compilation-cache
\[Avançado] Não utilize caches de compilação em locais padrão, como no pacote QL que contém a consulta ou no diretório da cadeia de ferramentas CodeQL.
Opções para configurar o gerenciador de pacotes CodeQL
--registries-auth-stdin
Autentique-se nos registros de contêiner do GitHub Enterprise Server transmitindo uma lista separada por vírgula de pares <registry_url>=<token>.
Por exemplo, você pode transmitir https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2
para se autenticar em duas instâncias do GitHub Enterprise Server.
Isso substitui as variáveis de ambiente CODEQL_REGISTRIES_AUTH e GITHUB_TOKEN. Se você só precisar se autenticar no registro de contêiner do github.com, poderá se autenticar usando a opção --github-auth-stdin mais simples.
--github-auth-stdin
Autentique-se no registro de contêiner do github.com transmitindo um token do GitHub Apps do github.com ou um token de acesso pessoal por meio da entrada padrão.
Para se autenticar nos registros de contêiner do GitHub Enterprise Server, transmita --registries-auth-stdin ou use a variável de ambiente CODEQL_REGISTRIES_AUTH.
Isso substitui a variável de ambiente GITHUB_TOKEN.
Opções comuns
-h, --help
Mostre este texto de ajuda.
-J=<opt>
\[Avançado] Dê opções à JVM que executa o comando.
(Use-a com cautela, pois as opções que contêm espaços não serão tratadas corretamente.)
-v, --verbose
Aumente incrementalmente o número de mensagens de progresso impressas.
-q, --quiet
Diminua incrementalmente o número de mensagens de progresso impressas.
--verbosity=<level>
\[Avançado] Defina explicitamente o nível de detalhamento para um dos seguintes: erros, avisos, progresso, progresso+, progresso++, progresso+++. Substitui `-v` e `-q`.
--logdir=<dir>
\[Avançado] Grava registros detalhados em um ou mais arquivos no diretório especificado, com nomes gerados que incluem carimbos de data/hora e o nome do subcomando em execução.
(Para gravar um arquivo de log com um nome sobre o qual você tem controle completo, forneça --log-to-stderr e redirecione stderr conforme desejado.)
--common-caches=<dir>
\[Avançado] Controla a localização dos dados em cache no disco que persistirão entre várias execuções da CLI, como pacotes QL baixados e planos de consulta compilados. Se não for definido explicitamente, o padrão corresponde a um diretório intitulado `.codeql` no diretório inicial do usuário; que será criado se ainda não existir.
Disponível desde v2.15.2.