kythe.io@v0.0.68-0.20240422202219-7225dbc01741/kythe/proto/schema.proto (about) 1 /* 2 * Copyright 2018 The Kythe Authors. All rights reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 syntax = "proto3"; 18 19 package kythe.proto.schema; 20 21 option go_package = "kythe.io/kythe/proto/schema_go_proto"; 22 option java_package = "com.google.devtools.kythe.proto"; 23 24 import "google/protobuf/descriptor.proto"; 25 import "kythe/proto/storage.proto"; 26 27 // Metadata about a Kythe schema entity. 28 message Metadata { 29 // String label of the schema entity. 30 string label = 1; 31 } 32 33 extend google.protobuf.EnumValueOptions { 34 Metadata metadata = 69945; 35 } 36 37 enum Language { 38 UNKNOWN_LANGUAGE = 0; 39 40 CXX = 1 [(metadata).label = "c++"]; 41 DART = 2 [(metadata).label = "dart"]; 42 GO = 3 [(metadata).label = "go"]; 43 HASKELL = 4 [(metadata).label = "haskell"]; 44 JAVA = 5 [(metadata).label = "java"]; 45 KOTLIN = 6 [(metadata).label = "kotlin"]; 46 PROTOBUF = 7 [(metadata).label = "protobuf"]; 47 TEXTPROTO = 8 [(metadata).label = "textproto"]; 48 TYPESCRIPT = 9 [(metadata).label = "typescript"]; 49 VERILOG = 10 [(metadata).label = "verilog"]; 50 } 51 52 enum NodeKind { 53 UNKNOWN_NODE_KIND = 0; 54 55 reserved 1, 2; 56 ANCHOR = 3 [(metadata).label = "anchor"]; 57 CONSTANT = 4 [(metadata).label = "constant"]; 58 DIAGNOSTIC = 5 [(metadata).label = "diagnostic"]; 59 DOC = 6 [(metadata).label = "doc"]; 60 FILE = 7 [(metadata).label = "file"]; 61 GFLAG = 27 [(metadata).label = "google/gflag"]; 62 INTERFACE = 8 [(metadata).label = "interface"]; 63 FUNCTION = 9 [(metadata).label = "function"]; 64 LOOKUP = 10 [(metadata).label = "lookup"]; 65 MACRO = 11 [(metadata).label = "macro"]; 66 META = 12 [(metadata).label = "meta"]; 67 NAME = 13 [(metadata).label = "name"]; 68 PACKAGE = 14 [(metadata).label = "package"]; 69 PROCESS = 15 [(metadata).label = "process"]; 70 RECORD = 16 [(metadata).label = "record"]; 71 SUM = 17 [(metadata).label = "sum"]; 72 SYMBOL = 18 [(metadata).label = "symbol"]; 73 TALIAS = 19 [(metadata).label = "talias"]; 74 TAPP = 20 [(metadata).label = "tapp"]; 75 TVAR = 26 [(metadata).label = "tvar"]; 76 TBUILTIN = 21 [(metadata).label = "tbuiltin"]; 77 TNOMINAL = 22 [(metadata).label = "tnominal"]; 78 TSIGMA = 23 [(metadata).label = "tsigma"]; 79 VARIABLE = 24 [(metadata).label = "variable"]; 80 VCS = 25 [(metadata).label = "vcs"]; 81 } 82 83 enum Subkind { 84 UNKNOWN_SUBKIND = 0; 85 86 CATEGORY = 1 [(metadata).label = "category"]; 87 CLASS = 2 [(metadata).label = "class"]; 88 CONSTRUCTOR = 3 [(metadata).label = "constructor"]; 89 DESTRUCTOR = 4 [(metadata).label = "destructor"]; 90 ENUM = 5 [(metadata).label = "enum"]; 91 ENUM_CLASS = 6 [(metadata).label = "enumClass"]; 92 FIELD = 7 [(metadata).label = "field"]; 93 IMPLICIT = 8 [(metadata).label = "implicit"]; 94 IMPORT = 9 [(metadata).label = "import"]; 95 INITIALIZER = 10 [(metadata).label = "initializer"]; 96 LOCAL = 11 [(metadata).label = "local"]; 97 LOCAL_PARAMETER = 12 [(metadata).label = "local/parameter"]; 98 METHOD = 13 [(metadata).label = "method"]; 99 NAMESPACE = 14 [(metadata).label = "namespace"]; 100 STRUCT = 15 [(metadata).label = "struct"]; 101 TYPE = 16 [(metadata).label = "type"]; 102 UNION = 17 [(metadata).label = "union"]; 103 } 104 105 enum FactName { 106 UNKNOWN_FACT_NAME = 0; 107 108 CODE = 1 [(metadata).label = "/kythe/code"]; 109 COMPLETE = 2 [(metadata).label = "/kythe/complete"]; 110 CONTEXT_URL = 3 [(metadata).label = "/kythe/context/url"]; 111 DETAILS = 4 [(metadata).label = "/kythe/details"]; 112 DOC_URI = 5 [(metadata).label = "/kythe/doc/uri"]; 113 LABEL = 6 [(metadata).label = "/kythe/label"]; 114 LOC_END = 7 [(metadata).label = "/kythe/loc/end"]; 115 LOC_START = 8 [(metadata).label = "/kythe/loc/start"]; 116 MESSAGE = 9 [(metadata).label = "/kythe/message"]; 117 NODE_KIND = 10 [(metadata).label = "/kythe/node/kind"]; 118 PARAM_DEFAULT = 11 [(metadata).label = "/kythe/param/default"]; 119 RULE_CLASS = 12 [(metadata).label = "/kythe/ruleclass"]; 120 SNIPPET_END = 13 [(metadata).label = "/kythe/snippet/end"]; 121 SNIPPET_START = 14 [(metadata).label = "/kythe/snippet/start"]; 122 SUBKIND = 15 [(metadata).label = "/kythe/subkind"]; 123 TEXT = 16 [(metadata).label = "/kythe/text"]; 124 TEXT_ENCODING = 17 [(metadata).label = "/kythe/text/encoding"]; 125 VISIBILITY = 18 [(metadata).label = "/kythe/visibility"]; 126 BUILD_CONFIG = 19 [(metadata).label = "/kythe/build/config"]; 127 TAG_DEPRECATED = 20 [(metadata).label = "/kythe/tag/deprecated"]; 128 } 129 130 enum EdgeKind { 131 UNKNOWN_EDGE_KIND = 0; 132 133 ALIASES = 1 [(metadata).label = "/kythe/edge/aliases"]; 134 ALIASES_ROOT = 2 [(metadata).label = "/kythe/edge/aliases/root"]; 135 ANNOTATED_BY = 3 [(metadata).label = "/kythe/edge/annotatedby"]; 136 BOUNDED_LOWER = 4 [(metadata).label = "/kythe/edge/bounded/lower"]; 137 BOUNDED_UPPER = 5 [(metadata).label = "/kythe/edge/bounded/upper"]; 138 CHILD_OF = 6 [(metadata).label = "/kythe/edge/childof"]; 139 CHILD_OF_CONTEXT = 7 [(metadata).label = "/kythe/edge/childof/context"]; 140 COMPLETED_BY = 49 [(metadata).label = "/kythe/edge/completedby"]; 141 DEFINES = 10 [(metadata).label = "/kythe/edge/defines"]; 142 DEFINES_BINDING = 11 [(metadata).label = "/kythe/edge/defines/binding"]; 143 DEFINES_IMPLICIT = 50 [(metadata).label = "/kythe/edge/defines/implicit"]; 144 DENOTES = 51 [(metadata).label = "/kythe/edge/denotes"]; 145 DEPENDS = 12 [(metadata).label = "/kythe/edge/depends"]; 146 DOCUMENTS = 13 [(metadata).label = "/kythe/edge/documents"]; 147 EXPORTS = 14 [(metadata).label = "/kythe/edge/exports"]; 148 EXTENDS = 15 [(metadata).label = "/kythe/edge/extends"]; 149 GENERATES = 16 [(metadata).label = "/kythe/edge/generates"]; 150 IMPUTES = 17 [(metadata).label = "/kythe/edge/imputes"]; 151 INSTANTIATES = 18 [(metadata).label = "/kythe/edge/instantiates"]; 152 INSTANTIATES_SPECULATIVE = 19 153 [(metadata).label = "/kythe/edge/instantiates/speculative"]; 154 NAMED = 20 [(metadata).label = "/kythe/edge/named"]; 155 OVERRIDES = 21 [(metadata).label = "/kythe/edge/overrides"]; 156 OVERRIDES_ROOT = 22 [(metadata).label = "/kythe/edge/overrides/root"]; 157 OVERRIDES_TRANSITIVE = 23 158 [(metadata).label = "/kythe/edge/overrides/transitive"]; 159 PARAM = 24 [(metadata).label = "/kythe/edge/param"]; 160 PROPERTY_READS = 44 [(metadata).label = "/kythe/edge/property/reads"]; 161 PROPERTY_WRITES = 45 [(metadata).label = "/kythe/edge/property/writes"]; 162 REF = 25 [(metadata).label = "/kythe/edge/ref"]; 163 REF_CALL = 26 [(metadata).label = "/kythe/edge/ref/call"]; 164 REF_CALL_IMPLICIT = 27 [(metadata).label = "/kythe/edge/ref/call/implicit"]; 165 REF_DOC = 28 [(metadata).label = "/kythe/edge/ref/doc"]; 166 REF_EXPANDS = 29 [(metadata).label = "/kythe/edge/ref/expands"]; 167 REF_EXPANDS_TRANSITIVE = 30 168 [(metadata).label = "/kythe/edge/ref/expands/transitive"]; 169 REF_FILE = 31 [(metadata).label = "/kythe/edge/ref/file"]; 170 REF_ID = 46 [(metadata).label = "/kythe/edge/ref/id"]; 171 REF_IMPLICIT = 32 [(metadata).label = "/kythe/edge/ref/implicit"]; 172 REF_IMPORTS = 33 [(metadata).label = "/kythe/edge/ref/imports"]; 173 REF_INCLUDES = 34 [(metadata).label = "/kythe/edge/ref/includes"]; 174 REF_INIT = 35 [(metadata).label = "/kythe/edge/ref/init"]; 175 REF_INIT_IMPLICIT = 36 [(metadata).label = "/kythe/edge/ref/init/implicit"]; 176 REF_QUERIES = 37 [(metadata).label = "/kythe/edge/ref/queries"]; 177 REF_WRITES = 47 [(metadata).label = "/kythe/edge/ref/writes"]; 178 SATISFIES = 38 [(metadata).label = "/kythe/edge/satisfies"]; 179 SPECIALIZES = 39 [(metadata).label = "/kythe/edge/specializes"]; 180 SPECIALIZES_SPECULATIVE = 40 181 [(metadata).label = "/kythe/edge/specializes/speculative"]; 182 TAGGED = 41 [(metadata).label = "/kythe/edge/tagged"]; 183 TPARAM = 48 [(metadata).label = "/kythe/edge/tparam"]; 184 TYPED = 42 [(metadata).label = "/kythe/edge/typed"]; 185 UNDEFINES = 43 [(metadata).label = "/kythe/edge/undefines"]; 186 187 reserved 8, 9; 188 } 189 190 // A Node represents a Kythe graph node with all its known facts and edges. 191 message Node { 192 kythe.proto.VName source = 1; 193 194 // Facts associated with the source VName (making exception for a small number 195 // of special-cases below). 196 repeated Fact fact = 2; 197 198 // Edges associated with the source VName. 199 repeated Edge edge = 3; 200 201 // Special-case for the ubiquitous /kythe/node/kind fact. This fact will not 202 // appear in the fact list above. 203 oneof kind { 204 NodeKind kythe_kind = 4; 205 string generic_kind = 5; 206 } 207 208 // Special-case for the ubiquitous /kythe/subkind fact. This fact will not 209 // appear in the fact list above. 210 oneof subkind { 211 Subkind kythe_subkind = 6; 212 string generic_subkind = 7; 213 } 214 } 215 216 // A Fact represents a single Kythe graph node fact. 217 message Fact { 218 kythe.proto.VName source = 1; 219 220 // The fact's name. If standard, a Kythe FactName enum is used. Otherwise, 221 // the fact name will be represented as a string (as encoded in an 222 // Entry.fact_name). 223 oneof name { 224 FactName kythe_name = 2; 225 string generic_name = 3; 226 } 227 228 bytes value = 4; 229 } 230 231 // An Edge represents a single Kythe graph edge. 232 message Edge { 233 kythe.proto.VName source = 1; 234 kythe.proto.VName target = 2; 235 236 // The edge's kind. If standard, a Kythe EdgeKind enum is used. Otherwise, 237 // the edge kind will be represented as a string (as encoded in an 238 // Entry.edge_kind without its ordinal). 239 oneof kind { 240 EdgeKind kythe_kind = 3; 241 string generic_kind = 4; 242 } 243 int32 ordinal = 5; 244 245 Node source_node = 6; 246 Node target_node = 7; 247 } 248 249 // A Kythe Entry represents a single graph node fact or edge. 250 message Entry { 251 oneof entry { 252 Fact fact = 1; 253 Edge edge = 2; 254 } 255 }