-
Notifications
You must be signed in to change notification settings - Fork 0
/
specman.ctags
68 lines (56 loc) · 4.32 KB
/
specman.ctags
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# This file uses Universal Ctags extensions and may not be suitable
# for Exuberant Ctags
--langdef=Specman
--langmap=Specman:.e
--kinddef-Specman=c,class,struct and unit definition or extension
--kinddef-Specman=d,define,preprocessor macro
--kinddef-Specman=e,event,event declaration
--kinddef-Specman=f,field,field declaration
--kinddef-Specman=l,variable,local variable declaration
--kinddef-Specman=m,method,method declaration
--kinddef-Specman=n,enum,enum item declaration
--kinddef-Specman=p,package,package declaration
--kinddef-Specman=t,type,enumerated type declaration or extension
--kinddef-Specman=x,check,concurrent (eXpect) or procedural check
--kinddef-Specman=C,constraint,named constraint
--_scopesep-Specman=p/c:::
--_scopesep-Specman=*/*:.
#--_tabledef-Specman=statement
#--_tabledef-Specman=blockcomment
#--_tabledef-Specman=linecomment
#--_tabledef-Specman=typedef
#--_tabledef-Specman=typemembers
# Simplify things by assuming that statements start in the first
# column
#--_mtable-regex-Specman=statement/^(type|extend)[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*:[[:space:]]*\[[[:space:]]*/\2/{tenter=typemembers}{pcre2}
#--_mtable-regex-Specman=typemembers/[[:space:]]*([a-zA-Z][a-zA-Z0-9_]*)[^],]*/\1/{pcre2}
#--_mtable-regex-Specman=typemembers/,[[:space:]]*//{pcre2}
#--_mtable-regex-Specman=typemembers/\]//{tleave}{pcre2}
--regex-Specman=/^(package)[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*;/\2/p/{scope=push}{pcre2}
--regex-Specman=/^(struct|unit|extend).*?[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*(\{|of[[:space:]]|like[[:space:]]|$)/\2/c/{scope=push}{pcre2}
--regex-Specman=/^(package[[:space:]]+)?template[[:space:]]+(struct|unit|extend|interface|numeric_type)[[:space:]]+.*?([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*of[[:space:]]*(\([[:space:]]*)?</\3/c/{scope=push}{pcre2}
--regex-Specman=/^\};///{placeholder}{scope=pop}{pcre2}
--regex-Specman=/^(type|extend)[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*[:;]/\2/t/{pcre2}
--regex-Specman=/^\#?define[[:space:]]+`?([a-zA-Z][a-zA-Z0-9_]*).*;/\1/d/{pcre2}
# A bit of a hack: If the match string in a complex macro definition
# starts with a literal identifier, it will be considered the "name"
# of the macro. We can't do any better wthout a parser, sadly.
--regex-Specman=/^define[[:space:]]+<[^>]+>[[:space:]]"(\((<[A-Z]+>)?[[:space:]]*)?([a-zA-Z][a-zA-Z0-9_]*)/\3/d/{pcre2}
--regex-Specman=/^[[:space:]]*event[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]+/\1/e/{pcre2}
--regex-Specman=/^[[:space:]]*(final[[:space:]]+)?([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*\(.*\)[[:space:]]*(:[[:space:]]*[a-zA-Z][a-zA-Z0-9_]*)?([[:space:]]+@[a-zA-Z][a-zA-Z0-9_]*)?is[[:space:]]*(first|also|only|undefined|empty)?[[:space:]]*(\{|$)/\2/m/{scope=ref}{pcre2}
--regex-Specman=/^[[:space:]]*(static[[:space:]]+)?on[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*\{/on_\2/m/{scope=ref}{pcre2}
--regex-Specman=/^[[:space:]]+((package|private)[[:space:]]+)?([%!]+[[:space:]]*)?([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*(;|:[[:space:]]*[^ \t{])/\4/f/{scope=ref}{pcre2}
--regex-Specman=/^[[:space:]]*var[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*:/\1/l/{pcre2}
--regex-Specman=/^[[:space:]]*(expect|check)[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*/\2/x/{pcre2}
--regex-Specman=/^[[:space:]]*keep[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*is/\1/C/{pcre2}
# Register model (vr_ad)
--regex-Specman=/^[[:space:]]*reg_def[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)/\1/c/{scope=push}{pcre2}
--regex-Specman=/^[[:space:]]*reg_fld[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*:/\1/f/{scope=ref}{pcre2}
# Sequences
# Pragmatically create tags for default type/driver names even if
# explicit names have been provided.
--regex-Specman=/^[[:space:]]*(template[[:space:]]+)?sequence[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*/\2/c/{pcre2}
--regex-Specman=/^[[:space:]]*(template[[:space:]]+)?sequence[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*/\2_kind/t/{pcre2}
--regex-Specman=/^[[:space:]]*(template[[:space:]]+)?sequence[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*/\2_driver/c/{pcre2}
--regex-Specman=/^[[:space:]]*(template[[:space:]]+)?sequence[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*).*[[:space:]]using[[:space:]].*created_kind=([a-zA-Z][a-zA-Z0-9_]*)/\3/t/{pcre2}
--regex-Specman=/^[[:space:]]*(template[[:space:]]+)?sequence[[:space:]]+([a-zA-Z][a-zA-Z0-9_]*).*[[:space:]]using[[:space:]].*created_driver=([a-zA-Z][a-zA-Z0-9_]*)/\3/c/{pcre2}