# Copyright 2018 The Kythe Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# message type: kythe.proto.schema.Index

edge_kinds: {
  prefix: "/kythe/edge/"
  edge_kind: {key: "aliases"                  value: ALIASES}
  edge_kind: {key: "aliases/root"             value: ALIASES_ROOT}
  edge_kind: {key: "annotatedby"              value: ANNOTATED_BY}
  edge_kind: {key: "bounded/lower"            value: BOUNDED_LOWER}
  edge_kind: {key: "bounded/upper"            value: BOUNDED_UPPER}
  edge_kind: {key: "childof"                  value: CHILD_OF}
  edge_kind: {key: "childof/context"          value: CHILD_OF_CONTEXT}
  edge_kind: {key: "completes"                value: COMPLETES}
  edge_kind: {key: "completes/uniquely"       value: COMPLETES_UNIQUELY}
  edge_kind: {key: "defines"                  value: DEFINES}
  edge_kind: {key: "defines/binding"          value: DEFINES_BINDING}
  edge_kind: {key: "depends"                  value: DEPENDS}
  edge_kind: {key: "documents"                value: DOCUMENTS}
  edge_kind: {key: "exports"                  value: EXPORTS}
  edge_kind: {key: "extends"                  value: EXTENDS}
  edge_kind: {key: "generates"                value: GENERATES}
  edge_kind: {key: "instantiates"             value: INSTANTIATES}
  edge_kind: {key: "instantiates/speculative" value: INSTANTIATES_SPECULATIVE}
  edge_kind: {key: "imputes"                  value: IMPUTES}
  edge_kind: {key: "named"                    value: NAMED}
  edge_kind: {key: "overrides"                value: OVERRIDES}
  edge_kind: {key: "overrides/root"           value: OVERRIDES_ROOT}
  edge_kind: {key: "overrides/transitive"     value: OVERRIDES_TRANSITIVE}
  edge_kind: {key: "param"                    value: PARAM}
  edge_kind: {key: "ref"                      value: REF}
  edge_kind: {key: "ref/implicit"             value: REF_IMPLICIT}
  edge_kind: {key: "ref/call"                 value: REF_CALL}
  edge_kind: {key: "ref/call/implicit"        value: REF_CALL_IMPLICIT}
  edge_kind: {key: "ref/doc"                  value: REF_DOC}
  edge_kind: {key: "ref/expands"              value: REF_EXPANDS}
  edge_kind: {key: "ref/expands/transitive"   value: REF_EXPANDS_TRANSITIVE}
  edge_kind: {key: "ref/file"                 value: REF_FILE}
  edge_kind: {key: "ref/imports"              value: REF_IMPORTS}
  edge_kind: {key: "ref/includes"             value: REF_INCLUDES}
  edge_kind: {key: "ref/init"                 value: REF_INIT}
  edge_kind: {key: "ref/init/implicit"        value: REF_INIT_IMPLICIT}
  edge_kind: {key: "ref/queries"              value: REF_QUERIES}
  edge_kind: {key: "satisfies"                value: SATISFIES}
  edge_kind: {key: "specializes"              value: SPECIALIZES}
  edge_kind: {key: "specializes/speculative"  value: SPECIALIZES_SPECULATIVE}
  edge_kind: {key: "tagged"                   value: TAGGED}
  edge_kind: {key: "typed"                    value: TYPED}
  edge_kind: {key: "undefines"                value: UNDEFINES}
}

node_kinds: {
  node_kind: {key: "abs"        value: ABS}
  node_kind: {key: "absvar"     value: ABSVAR}
  node_kind: {key: "anchor"     value: ANCHOR}
  node_kind: {key: "constant"   value: CONSTANT}
  node_kind: {key: "diagnostic" value: DIAGNOSTIC}
  node_kind: {key: "doc"        value: DOC}
  node_kind: {key: "file"       value: FILE}
  node_kind: {key: "interface"  value: INTERFACE}
  node_kind: {key: "function"   value: FUNCTION}
  node_kind: {key: "lookup"     value: LOOKUP}
  node_kind: {key: "macro"      value: MACRO}
  node_kind: {key: "meta"       value: META}
  node_kind: {key: "name"       value: NAME}
  node_kind: {key: "package"    value: PACKAGE}
  node_kind: {key: "process"    value: PROCESS}
  node_kind: {key: "record"     value: RECORD}
  node_kind: {key: "sum"        value: SUM}
  node_kind: {key: "symbol"     value: SYMBOL}
  node_kind: {key: "talias"     value: TALIAS}
  node_kind: {key: "tapp"       value: TAPP}
  node_kind: {key: "tbuiltin"   value: TBUILTIN}
  node_kind: {key: "tnominal"   value: TNOMINAL}
  node_kind: {key: "tsigma"     value: TSIGMA}
  node_kind: {key: "variable"   value: VARIABLE}
  node_kind: {key: "vcs"        value: VCS}
}

fact_names: {
  prefix: "/kythe/"
  fact_name: {key: "build/config"   value: BUILD_CONFIG}
  fact_name: {key: "code"           value: CODE}
  fact_name: {key: "complete"       value: COMPLETE}
  fact_name: {key: "context/url"    value: CONTEXT_URL}
  fact_name: {key: "details"        value: DETAILS}
  fact_name: {key: "doc/uri"        value: DOC_URI}
  fact_name: {key: "label"          value: LABEL}
  fact_name: {key: "loc/end"        value: LOC_END}
  fact_name: {key: "loc/start"      value: LOC_START}
  fact_name: {key: "message"        value: MESSAGE}
  fact_name: {key: "node/kind"      value: NODE_KIND}
  fact_name: {key: "param/default"  value: PARAM_DEFAULT}
  fact_name: {key: "ruleclass"      value: RULE_CLASS}
  fact_name: {key: "snippet/end"    value: SNIPPET_END}
  fact_name: {key: "snippet/start"  value: SNIPPET_START}
  fact_name: {key: "subkind"        value: SUBKIND}
  fact_name: {key: "text"           value: TEXT}
  fact_name: {key: "text/encoding"  value: TEXT_ENCODING}
  fact_name: {key: "visibility"     value: VISIBILITY}
  fact_name: {key: "tag/deprecated" value: TAG_DEPRECATED}
}

subkinds: {
  subkind: {key: "category"        value: CATEGORY}
  subkind: {key: "class"           value: CLASS}
  subkind: {key: "constructor"     value: CONSTRUCTOR}
  subkind: {key: "destructor"      value: DESTRUCTOR}
  subkind: {key: "enum"            value: ENUM}
  subkind: {key: "enumClass"       value: ENUM_CLASS}
  subkind: {key: "field"           value: FIELD}
  subkind: {key: "implicit"        value: IMPLICIT}
  subkind: {key: "import"          value: IMPORT}
  subkind: {key: "initializer"     value: INITIALIZER}
  subkind: {key: "local"           value: LOCAL}
  subkind: {key: "local/parameter" value: LOCAL_PARAMETER}
  subkind: {key: "method"          value: METHOD}
  subkind: {key: "namespace"       value: NAMESPACE}
  subkind: {key: "struct"          value: STRUCT}
  subkind: {key: "type"            value: TYPE}
  subkind: {key: "union"           value: UNION}
}
