static async analyzeProject(analyzeFileCfg) {
    LogService.debug(`Analyzer "${this.name}": started _traverse method`);

    let finalTargetData;
    if (!analyzeFileCfg.filePaths) {
      finalTargetData = analyzeFileCfg.targetData;
    } else {
      const { projectPath, projectName } = analyzeFileCfg;
      if (!projectPath) {
        LogService.error(`[Analyzer._traverse]: you must provide a projectPath`);
      }
      finalTargetData = await InputDataService.createDataObject([
        {
          project: {
            name: projectName || '[n/a]',
            path: projectPath,
          },
          entries: analyzeFileCfg.filePaths,
        },
      ]);
    }

    /**
     * Create ASTs for our inputData
     */
    const astDataProjects = await QueryService.addAstToProjectsData(
      finalTargetData,
      this.requiredAst,
    );
    return analyzePerAstFile(
      astDataProjects[0],
      analyzeFileCfg.traverseEntryFn,
      analyzeFileCfg.config,
    );
  }
@param {FileAstTraverseFn|{traverseEntryFn: FileAstTraverseFn; filePaths:string[]; projectPath: string; targetData: ProjectInputDataWithMeta}} analyzeFileCfg