// Copyright 2018 The Bazel 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.

package com.google.devtools.coverageoutputgenerator;

import com.google.common.collect.ImmutableList;

/**
 * Stores markers used by the lcov tracefile and gcov intermediate format file. See <a
 * href="http://ltp.sourceforge.net/coverage/lcov/geninfo.1.php">lcov documentation</a> and the flag
 * {@code --intermediate-format} in <a href="https://gcc.gnu.org/onlinedocs/gcc/Invoking-Gcov.html">
 * gcov documentation</a>.
 */
class Constants {
  static final String SF_MARKER = "SF:";
  static final String FN_MARKER = "FN:";
  static final String FNDA_MARKER = "FNDA:";
  static final String FNF_MARKER = "FNF:";
  static final String FNH_MARKER = "FNH:";
  static final String BRDA_MARKER = "BRDA:";
  static final String BA_MARKER = "BA:";
  static final String BRF_MARKER = "BRF:";
  static final String BRH_MARKER = "BRH:";
  static final String DA_MARKER = "DA:";
  static final String LH_MARKER = "LH:";
  static final String LF_MARKER = "LF:";
  static final String END_OF_RECORD_MARKER = "end_of_record";
  static final String NEVER_EVALUATED = "-";
  static final String TRACEFILE_EXTENSION = ".dat";
  static final String GCOV_EXTENSION = ".gcov";
  static final String GCOV_JSON_EXTENSION = ".gcov.json.gz";
  static final String PROFDATA_EXTENSION = ".profdata";
  static final String DELIMITER = ",";
  static final String GCOV_VERSION_MARKER = "version:";
  static final String GCOV_CWD_MARKER = "cwd:";
  static final String GCOV_FILE_MARKER = "file:";
  static final String GCOV_FUNCTION_MARKER = "function:";
  static final String GCOV_LINE_MARKER = "lcount:";
  static final String GCOV_BRANCH_MARKER = "branch:";
  static final String GCOV_BRANCH_NOTEXEC = "notexec";
  static final String GCOV_BRANCH_NOTTAKEN = "nottaken";
  static final String GCOV_BRANCH_TAKEN = "taken";
  // Please keep in sync with the extensions in CppFileTypes.
  static final ImmutableList<String> CC_EXTENSIONS =
      ImmutableList.of(
          ".cc", ".cpp", ".cxx", ".c++", ".C", ".c", ".cu", ".cl", ".h", ".hh", ".hpp", ".ipp",
          ".hxx", ".inc", ".inl", ".tlh", ".tli", ".H");
}
