[question?] counterintuitive class method behaviour

Aberta
#21,670 9 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
38/100
Tipo de issue
Documentação
Clareza
Razoavelmente clara
Status de atividade
Pouca atividade
Domínio
documentation

Direção de pesquisa

Comece pela consulta e pela saída do CodeQL mostradas na issue e, em seguida, leia a documentação que aborda métodos de classe e avaliação de predicados. Confirme o comportamento pretendido e identifique a seção relevante da documentação; considera-se concluído quando o comportamento estiver explicado com clareza suficiente para abordar a lacuna relatada no modelo mental.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

question

When I write a query like this:

class Meow extends Struct {
  Field f;
  Meow() {
    f.getDeclaringType() = this
  }
  Field getField() { result = f }
}

from Meow m
select m, m.getField(), m.getField()

My mental model of this is: "Meow is essentially a (struct, struct's field) tuple. from Meow m will select all of those tuples. For each of those , select m, m.getField(), m.getField() will print their contents."

But that is actually not what happens, because you get results like this:

|                 m                 |                        col1                         |                        col2                         |
+-----------------------------------+-----------------------------------------------------+-----------------------------------------------------+
// [snip]
| port_io_ops                       | f_inb                                               | f_outb                                              |
// [snip]

Which means that the first m.getField() and the second m.getField() are operating on different Meow objects.

I've been debugging a bug in my query for hours now only to realize that this is what happens. Is this really intended? I read through a non-trivial amount of documentation and did not realize this, I feel like my whole mental model of how codeql works is shattering :S

(If it is really intended, could the documentation be updated to point this out more clearly?)

Linguagem predominante
CodeQL
Estrelas
10.1k
Forks
2.1k
Merge médio
2d 10h
PRs com merge (30d)
134

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de github/codeql

Todas as issues de github/codeql

Issues semelhantes

Mais issues de Documentation

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.