es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo encuentro literales de cadena que contengan una subcadena dada con clang-query?

Estoy realizando una refactorización automatizada y quiero entender si algún nombre se utiliza en cadenas de caracteres. Por ejemplo, en el código a continuación, quiero encontrar todas las literales de cadena que contengan la subcadena “hello”, lo que me dará la primera cadena.

int hello;
const char* str = “say hello”;
const char* str2 = “say world”;

Estoy utilizando clang-query para este propósito. Parece que necesito el selector stringLiteral, pero no puedo entender qué selector de estrechamiento o recorrido pasarle para seleccionar solo las literales con la subcadena dada.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puedes usar el comparador hasDescendant para reducir la selección de literales de cadena a aquellos que contienen el subcadena "hello". El comparador hasDescendant toma un comparador como argumento y coincidirá con cualquier nodo AST que tenga un nodo descendiente que coincida con el comparador dado. En este caso, puedes usar el comparador stringLiteral para coincidir con cualquier literal de cadena que contenga la subcadena "hello":

    clang-query> match hasDescendant(stringLiteral(hasSubstring("hello")))
    

Comments are closed.