xref: /Universal-ctags/main/field.h (revision 4dd2919f62dbb50491c5bb20543c48007f6a690c)
1 /*
2  *
3  *  Copyright (c) 2015, Red Hat, Inc.
4  *  Copyright (c) 2015, Masatake YAMATO
5  *
6  *  Author: Masatake YAMATO <yamato@redhat.com>
7  *
8  *   This source code is released for free distribution under the terms of the
9  *   GNU General Public License version 2 or (at your option) any later version.
10  *
11  */
12 #ifndef CTAGS_MAIN_FIELD_H
13 #define CTAGS_MAIN_FIELD_H
14 
15 /*
16 *   INCLUDE FILES
17 */
18 
19 #include "general.h"
20 #include "types.h"
21 
22 #include "vstring.h"
23 
24 /*
25 *   DATA DECLARATIONS
26 */
27 
28 typedef enum eFieldType { /* extension field content control */
29 	FIELD_UNKNOWN = -1,
30 
31 	/* BASIC FIELDS */
32 	FIELD_NAME,
33 	FIELD_INPUT_FILE,
34 	FIELD_PATTERN,
35 
36 	FIELD_ECTAGS_START,
37 	FIELD_COMPACT_INPUT_LINE = FIELD_ECTAGS_START,
38 
39 	/* EXTENSION FIELDS */
40 	FIELD_JSON_LOOP_START,
41 	FIELD_FILE_SCOPE = FIELD_JSON_LOOP_START,
42 	FIELD_KIND_LONG,
43 	FIELD_KIND,
44 	FIELD_LANGUAGE,
45 	FIELD_LINE_NUMBER,
46 	FIELD_SCOPE,
47 	FIELD_TYPE_REF,
48 	FIELD_KIND_KEY,
49 	FIELD_ECTAGS_LOOP_START,
50 	FIELD_INHERITANCE = FIELD_ECTAGS_LOOP_START,
51 	FIELD_ACCESS,
52 	FIELD_IMPLEMENTATION,
53 	FIELD_SIGNATURE,
54 	FIELD_ECTAGS_LOOP_LAST = FIELD_SIGNATURE,
55 
56 	/* Extension fields newly introduced in Universal Ctags. */
57 	FIELDS_UCTAGS_START,
58 	FIELD_REF_MARK = FIELDS_UCTAGS_START,
59 	FIELD_SCOPE_KEY,
60 	FIELD_SCOPE_KIND_LONG,
61 	FIELD_UCTAGS_LOOP_START,
62 	FIELD_ROLES = FIELD_UCTAGS_LOOP_START,
63 	FIELD_EXTRAS,
64 	FIELD_XPATH,
65 	FIELD_END_LINE,
66 	FIELD_EPOCH,
67 	FIELD_NTH,
68 
69 	FIELD_BUILTIN_LAST = FIELD_NTH,
70 } fieldType ;
71 
72 #define fieldDataTypeFalgs "sib" /* used in --list-fields */
73 typedef enum eFieldDataType {
74 	FIELDTYPE_STRING  = 1 << 0,
75 	FIELDTYPE_INTEGER = 1 << 1,
76 	FIELDTYPE_BOOL    = 1 << 2,
77 
78 	/* used in --list-fields */
79 	FIELDTYPE_END_MARKER = 1 << 3,
80 } fieldDataType;
81 
82 typedef const char* (*fieldRenderer)(const tagEntryInfo *const,
83 									 const char *,
84 									 vString *);
85 
86 #define FIELD_LETTER_NO_USE '\0'
87 struct sFieldDefinition {
88 	/* letter, and ftype are initialized in the main part,
89 	   not in a parser. */
90 #define NUL_FIELD_LETTER '\0'
91 	unsigned char letter;
92 	const char* name;
93 	const char* description;
94 	bool enabled;
95 
96 	fieldRenderer render;
97 	fieldRenderer renderNoEscaping;
98 	bool (* doesContainAnyChar) (const tagEntryInfo *const, const char*, const char *);
99 
100 	bool (* isValueAvailable) (const tagEntryInfo *const);
101 
102 	const char * getterValueType;
103 	struct _EsObject * (* getValueObject) (const tagEntryInfo *, const fieldDefinition *);
104 	const char * setterValueType;
105 
106 	/* Return es_false if passed value is acceptable.
107 	   Return an error object is unacceptable. */
108 	struct _EsObject * (* checkValueForSetter) (const fieldDefinition *, const struct _EsObject *);
109 	struct _EsObject * (* setValueObject) (tagEntryInfo *, const fieldDefinition *, const struct _EsObject *);
110 
111 	fieldDataType dataType; /* used in json output */
112 
113 	unsigned int ftype;	/* Given from the main part */
114 };
115 
116 
117 /*
118 *   FUNCTION PROTOTYPES
119 */
120 
121 extern bool isFieldEnabled (fieldType type);
122 
123 #endif	/* CTAGS_MAIN_FIELD_H */
124