/*
 * Copyright 2016 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.idea.blaze.base.lang.buildfile.language;

import com.google.idea.blaze.base.experiments.BoolExperiment;
import com.google.idea.blaze.base.settings.BlazeUserSettings;
import com.intellij.lang.Language;

/**
 * BUILD file language
 */
public class BuildFileLanguage extends Language {

  public static final BoolExperiment BUILD_FILE_SUPPORT_ENABLED = new BoolExperiment("build.file.support.enabled", true);

  public static boolean buildFileSupportEnabled() {
    return BUILD_FILE_SUPPORT_ENABLED.getValue() && BlazeUserSettings.getInstance().getBuildFileSupportEnabled();
  }

  public static final BuildFileLanguage INSTANCE = new BuildFileLanguage();

  private BuildFileLanguage() {
    super("BUILD", "text/python");
  }

  @Override
  public String getDisplayName() {
    return "BUILD file";
  }

  @Override
  public boolean isCaseSensitive() {
    return true;
  }

}
