Menu

#380 No tags found for C++ virtual function overrides

open
nobody
None
5
2019-11-20
2019-11-11
Uday Reddy
No

On the attached file, tags for most of the functions aren't found. It looks like all class methods that are marked override are missed.

$ ctags -o - parser.cpp
CustomOpAsmParser parser.cpp /^ CustomOpAsmParser(SMLoc nameLoc, StringRef opName, OperationParser &parser)$/;" f class:CustomOpAsmParser
CustomOpAsmParser parser.cpp /^class CustomOpAsmParser : public OpAsmParser {$/;" c file:
emittedError parser.cpp /^ bool emittedError = false;$/;" m class:CustomOpAsmParser file:
nameLoc parser.cpp /^ SMLoc nameLoc;$/;" m class:CustomOpAsmParser file:
opName parser.cpp /^ StringRef opName;$/;" m class:CustomOpAsmParser file:
parseOperation parser.cpp /^ ParseResult parseOperation(const AbstractOperation *opDefinition,$/;" f class:CustomOpAsmParser
parseOptionalArrowTypeList parser.cpp /^ ParseResult parseOptionalArrowTypeList(SmallVectorImpl<type> &result) {$/;" f class:CustomOpAsmParser
parsedRegionEntryArgumentPlaceholders parser.cpp /^ SmallVector<value *,="" 2=""> parsedRegionEntryArgumentPlaceholders;$/;" m class:CustomOpAsmParser file:
parser parser.cpp /^ OperationParser &parser;$/;" m class:CustomOpAsmParser file:</value></type>

$ ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Jan 31 2019, 16:34:25
Addresses: dhiebert@users.sourceforge.net, http://ctags.sourceforge.net
Optional compiled features: +wildcards, +regex

1 Attachments

Discussion

  • Masatake YAMATO

    Masatake YAMATO - 2019-11-11

    Use '-I override' option. See ctags(1) man page about -I.

    [yamato@slave]/tmp/mozilla_yamato0% ctags -I override -o -  ./parser.cpp 
    ctags -I override -o -  ./parser.cpp 
    CustomOpAsmParser   ./parser.cpp    /^  CustomOpAsmParser(SMLoc nameLoc, StringRef opName, OperationParser &parser)$/;" f   class:CustomOpAsmParser
    CustomOpAsmParser   ./parser.cpp    /^class CustomOpAsmParser : public OpAsmParser {$/;"    c   file:
    emittedError    ./parser.cpp    /^  bool emittedError = false;$/;"  m   class:CustomOpAsmParser file:
    getNameLoc  ./parser.cpp    /^  llvm::SMLoc getNameLoc() const override { return nameLoc; }$/;" f   class:CustomOpAsmParser
    nameLoc ./parser.cpp    /^  SMLoc nameLoc;$/;"  m   class:CustomOpAsmParser file:
    opName  ./parser.cpp    /^  StringRef opName;$/;"   m   class:CustomOpAsmParser file:
    parseAttribute  ./parser.cpp    /^  ParseResult parseAttribute(Attribute &result, Type type, StringRef attrName,$/;"    f   class:CustomOpAsmParser
    parseColon  ./parser.cpp    /^  ParseResult parseColon() override {$/;" f   class:CustomOpAsmParser
    parseColonType  ./parser.cpp    /^  ParseResult parseColonType(Type &result) override {$/;" f   class:CustomOpAsmParser
    parseColonTypeList  ./parser.cpp    /^  ParseResult parseColonTypeList(SmallVectorImpl<Type> &result) override {$/;"    f   class:CustomOpAsmParser
    parseComma  ./parser.cpp    /^  ParseResult parseComma() override {$/;" f   class:CustomOpAsmParser
    parseEqual  ./parser.cpp    /^  ParseResult parseEqual() override {$/;" f   class:CustomOpAsmParser
    parseLParen ./parser.cpp    /^  ParseResult parseLParen() override {$/;"    f   class:CustomOpAsmParser
    parseOperand    ./parser.cpp    /^  ParseResult parseOperand(OperandType &result) override {$/;"    f   class:CustomOpAsmParser
    parseOperandList    ./parser.cpp    /^  ParseResult parseOperandList(SmallVectorImpl<OperandType> &result,$/;"  f   class:CustomOpAsmParser
    parseOperation  ./parser.cpp    /^  ParseResult parseOperation(const AbstractOperation *opDefinition,$/;"   f   class:CustomOpAsmParser
    parseOptionalArrowTypeList  ./parser.cpp    /^  ParseResult parseOptionalArrowTypeList(SmallVectorImpl<Type> &result) {$/;" f   class:CustomOpAsmParser
    parseOptionalAttributeDict  ./parser.cpp    /^  parseOptionalAttributeDict(SmallVectorImpl<NamedAttribute> &result) override {$/;"  f   class:CustomOpAsmParser
    parseOptionalColon  ./parser.cpp    /^  ParseResult parseOptionalColon() override {$/;" f   class:CustomOpAsmParser
    parseOptionalColonTypeList  ./parser.cpp    /^  parseOptionalColonTypeList(SmallVectorImpl<Type> &result) override {$/;"    f   class:CustomOpAsmParser
    parseOptionalComma  ./parser.cpp    /^  ParseResult parseOptionalComma() override {$/;" f   class:CustomOpAsmParser
    parseOptionalKeyword    ./parser.cpp    /^  ParseResult parseOptionalKeyword(const char *keyword) override {$/;"    f   class:CustomOpAsmParser
    parseOptionalLParen ./parser.cpp    /^  ParseResult parseOptionalLParen() override {$/;"    f   class:CustomOpAsmParser
    parseOptionalRParen ./parser.cpp    /^  ParseResult parseOptionalRParen() override {$/;"    f   class:CustomOpAsmParser
    parseOptionalRegion ./parser.cpp    /^  ParseResult parseOptionalRegion(Region &region,$/;" f   class:CustomOpAsmParser
    parseOptionalRegionArgument ./parser.cpp    /^  ParseResult parseOptionalRegionArgument(OperandType &argument) override {$/;"   f   class:CustomOpAsmParser
    parseRParen ./parser.cpp    /^  ParseResult parseRParen() override {$/;"    f   class:CustomOpAsmParser
    parseRegion ./parser.cpp    /^  ParseResult parseRegion(Region &region, ArrayRef<OperandType> arguments,$/;"    f   class:CustomOpAsmParser
    parseRegionArgument ./parser.cpp    /^  ParseResult parseRegionArgument(OperandType &argument) override {$/;"   f   class:CustomOpAsmParser
    parseSuccessorAndUseList    ./parser.cpp    /^  parseSuccessorAndUseList(Block *&dest,$/;"  f   class:CustomOpAsmParser
    parseTrailingOperandList    ./parser.cpp    /^  ParseResult parseTrailingOperandList(SmallVectorImpl<OperandType> &result,$/;"  f   class:CustomOpAsmParser
    parseType   ./parser.cpp    /^  ParseResult parseType(Type &result) override {$/;"  f   class:CustomOpAsmParser
    parsedRegionEntryArgumentPlaceholders   ./parser.cpp    /^  SmallVector<Value *, 2> parsedRegionEntryArgumentPlaceholders;$/;"  m   class:CustomOpAsmParser file:
    parser  ./parser.cpp    /^  OperationParser &parser;$/;"    m   class:CustomOpAsmParser file:
    resolveOperand  ./parser.cpp    /^  ParseResult resolveOperand(const OperandType &operand, Type type,$/;"   f   class:CustomOpAsmParser
    
     
  • Uday Reddy

    Uday Reddy - 2019-11-11

    As per the man page, the -I option is specifically provided for preprocessor macros, and in general for identifiers that are to be specially handled. 'override' is a standard C++ keyword/identifier (since C++-11). Why should -I be needed for 'override'?

     
  • Masatake YAMATO

    Masatake YAMATO - 2019-11-19

    Why should -I be needed for 'override'?

    Because there is no other way to make ctags emit enough good tags file you want.
    See
    https://sourceforge.net/p/ctags/code/HEAD/tree/

    It seems that the develoment of ctags at sourceforge is stopped. C++-11 is too new language for ctags developed at sourceforge.

    However, -I option allows you to overcome the origial issue.

     
  • Uday Reddy

    Uday Reddy - 2019-11-20

    Thanks very much for the help and explanation!

     

Log in to post a comment.