143 lines
5.9 KiB
Protocol Buffer
143 lines
5.9 KiB
Protocol Buffer
/*
|
|
* Copyright 2019 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.
|
|
*/
|
|
|
|
/*
|
|
* The content of this file is copied from
|
|
* https://github.com/kythe/kythe/blob/master/kythe/proto/metadata.proto and
|
|
* https://github.com/kythe/kythe/blob/master/kythe/proto/storage.proto
|
|
* and shouldn't be modified unless the protos is outdated.
|
|
*/
|
|
|
|
syntax = "proto3";
|
|
|
|
package tensorflow;
|
|
|
|
// Schema for the JSON-encoded Kythe metadata describing the relationship
|
|
// between source and target code for generated code.
|
|
message GeneratedCodeInfo {
|
|
enum Type {
|
|
NONE = 0;
|
|
KYTHE0 = 1; // Initial metadata document type.
|
|
}
|
|
|
|
Type type = 1;
|
|
repeated MappingRule meta = 2; // Only relevant if type == kythe0.
|
|
}
|
|
|
|
// Metadata for a single mapping between a generated source range and a node
|
|
// in the source language or file.
|
|
message MappingRule {
|
|
enum Type {
|
|
NONE = 0;
|
|
NOP = 1; // Dummy rule that contains no relevant information.
|
|
ANCHOR_DEFINES = 2; // Rule describing a generates edge between target
|
|
// range and source definition.
|
|
ANCHOR_ANCHOR = 3; // Rule describing an imputes edge between target range
|
|
// and source range.
|
|
}
|
|
|
|
Type type = 1;
|
|
// If type == anchor_defines, this should generally be a reverse generates
|
|
// edge, %/kythe/edge/generates, indicating that the specified vname generated
|
|
// the source range.
|
|
// If type == anchor_anchor, this should generally be a forward imputes edge,
|
|
// /kythe/edge/imputes, indicating that the range in the source file produced
|
|
// the text in the target file.
|
|
// If semantic is not NONE, this field is ignored and the identified
|
|
// declaration at the indicated text range is given the associated semantic.
|
|
string edge = 2;
|
|
|
|
// Fields only relevant if type == anchor_defines.
|
|
VName vname = 3; // The semantic node in the source language
|
|
// which generated the text range.
|
|
uint32 begin = 4; // Beginning of the range to match in the generated text.
|
|
uint32 end = 5; // End of the range to match in the generated text.
|
|
|
|
enum Semantic {
|
|
SEMA_NONE = 0;
|
|
SEMA_WRITE = 1;
|
|
SEMA_READ_WRITE = 2;
|
|
}
|
|
|
|
Semantic semantic = 11;
|
|
|
|
// Fields only relevant if type == anchor_anchor.
|
|
VName source_vname = 6; // Anchor node in the generating source file.
|
|
// Note: the signature in this vname, if present,
|
|
// will typically be replaced by the target indexer
|
|
// using its own anchor-construction rules based on
|
|
// source_begin and source_end.
|
|
uint32 source_begin = 7; // loc/start of the anchor node in the source file.
|
|
uint32 source_end = 8; // loc/end of the anchor node in the source file.
|
|
uint32 target_begin = 9; // Start of the range in the generated text.
|
|
uint32 target_end = 10; // End of the range in the generated text.
|
|
}
|
|
|
|
message VName {
|
|
// A language-specific signature assigned by the analyzer.
|
|
// e.g., "com.google.common.collect.Lists.newLinkedList<#1>()"
|
|
string signature = 1;
|
|
|
|
// The corpus this name belongs to.
|
|
// e.g., "kythe", "chromium", "github.com/creachadair/imath", "aosp"
|
|
// The corpus label "kythe" is reserved for internal use.
|
|
string corpus = 2;
|
|
|
|
// A corpus-specific root label, designating a subordinate collection within
|
|
// the corpus. If a corpus stores files in unrelated directory structures,
|
|
// for example, the root can be used to distinguish them. Or, if a corpus
|
|
// incorporates subprojects, the root can be a project ID that it governs.
|
|
// This may also be used to distinguish virtual subgroups of a corpus such as
|
|
// generated files.
|
|
string root = 3;
|
|
|
|
// A path-structured label describing the location of this object relative to
|
|
// the corpus and the root. For code, this will generally be the relative
|
|
// path to the file containing the code, e.g., "storage/service.go" in kythe.
|
|
// The individual elements of the path are separated by "/".
|
|
// The path must not start with "/".
|
|
// The path must be normalized to a canonical form (with no path
|
|
// elements "", ".", or "..").
|
|
//
|
|
// However, this need not be a true file path; virtual objects like figments
|
|
// can assign an ad-hoc abstract ID, or omit it entirely.
|
|
//
|
|
// Examples:
|
|
// "devools/kythe/platform/go/datastore.go" (a file)
|
|
// "type/cpp/void.cc" (a type figment)
|
|
string path = 4;
|
|
|
|
// The language this name belongs to.
|
|
// e.g., "c++", "python", "elisp", "haskell", "java"
|
|
//
|
|
// The schema will define specific labels for each supported language, so we
|
|
// don't wind up with a confusion of names like "cxx", "cpp", "C++", etc.
|
|
// Prototype: Official language name converted to lowercase. If a version
|
|
// number is necessary, include it, e.g., "python3".
|
|
string language = 5;
|
|
|
|
// Other fields we may need in the future, but do not currently use:
|
|
// branch -- a branch name within the corpus depot, e.g., "gslb_branch".
|
|
// client -- a source-control client ID, e.g., "sergey:googlex:8:citc".
|
|
|
|
// Note: We have intentionally NOT included a revision or timestamp here.
|
|
// Time should be recorded as facts belonging to the appropriate Nodes and
|
|
// Edges. Having records of when something existed may be important, but time
|
|
// is not a good axis for a name -- a name should say "what" something is, not
|
|
// "when". So we will store timestamps, revisions, and other markers of this
|
|
// kind as facts inside the graph.
|
|
}
|