aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
blob: 05208dcdd06ab94b47415c3e0350781bdf021e6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// Copyright 2017 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.build.lib.syntax;

import com.google.auto.value.AutoValue;

/**
 * Options that affect Skylark semantics.
 *
 * <p>For descriptions of what these options do, see {@link SkylarkSemanticsOptions}.
 */
// TODO(brandjon): User error messages that reference options should maybe be substituted with the
// option name outside of the core Skylark interpreter?
// TODO(brandjon): Eventually these should be documented in full here, and SkylarkSemanticsOptions
// should refer to this class for documentation. But this doesn't play nice with the options
// parser's annotation mechanism.
@AutoValue
public abstract class SkylarkSemantics {

  /**
   * The AutoValue-generated concrete class implementing this one.
   *
   * <p>AutoValue implementation classes are usually package-private. We expose it here for the
   * benefit of code that relies on reflection.
   */
  public static final Class<? extends SkylarkSemantics> IMPL_CLASS =
      AutoValue_SkylarkSemantics.class;

  // <== Add new options here in alphabetic order ==>
  public abstract boolean incompatibleBzlDisallowLoadAfterStatement();
  public abstract boolean incompatibleDepsetIsNotIterable();
  public abstract boolean incompatibleDepsetUnion();
  public abstract boolean incompatibleDisableGlobTracking();
  public abstract boolean incompatibleDisableObjcProviderResources();
  public abstract boolean incompatibleDisallowDictPlus();
  public abstract boolean incompatibleDisallowThreeArgVardef();
  public abstract boolean incompatibleDisallowToplevelIfStatement();
  public abstract boolean incompatibleNewActionsApi();
  public abstract boolean incompatibleRemoveNativeGitRepository();
  public abstract boolean incompatibleRemoveNativeHttpArchive();
  public abstract boolean incompatibleStringIsNotIterable();
  public abstract boolean internalSkylarkFlagTestCanary();

  /** Returns a {@link Builder} initialized with the values of this instance. */
  public abstract Builder toBuilder();

  public static Builder builder() {
    return new AutoValue_SkylarkSemantics.Builder();
  }

  /** Returns a {@link Builder} initialized with default values for all options. */
  public static Builder builderWithDefaults() {
    return DEFAULT_SEMANTICS.toBuilder();
  }

  public static final SkylarkSemantics DEFAULT_SEMANTICS =
      builder()
          // <== Add new options here in alphabetic order ==>
          .incompatibleBzlDisallowLoadAfterStatement(false)
          .incompatibleDepsetIsNotIterable(false)
          .incompatibleDepsetUnion(false)
          .incompatibleDisableGlobTracking(true)
          .incompatibleDisableObjcProviderResources(false)
          .incompatibleDisallowDictPlus(false)
          .incompatibleDisallowThreeArgVardef(false)
          .incompatibleDisallowToplevelIfStatement(true)
          .incompatibleNewActionsApi(false)
          .incompatibleRemoveNativeGitRepository(false)
          .incompatibleRemoveNativeHttpArchive(false)
          .incompatibleStringIsNotIterable(false)
          .internalSkylarkFlagTestCanary(false)
          .build();

  /** Builder for {@link SkylarkSemantics}. All fields are mandatory. */
  @AutoValue.Builder
  public abstract static class Builder {

    // <== Add new options here in alphabetic order ==>
    public abstract Builder incompatibleBzlDisallowLoadAfterStatement(boolean value);
    public abstract Builder incompatibleDepsetIsNotIterable(boolean value);
    public abstract Builder incompatibleDepsetUnion(boolean value);
    public abstract Builder incompatibleDisableGlobTracking(boolean value);
    public abstract Builder incompatibleDisableObjcProviderResources(boolean value);
    public abstract Builder incompatibleDisallowDictPlus(boolean value);
    public abstract Builder incompatibleDisallowThreeArgVardef(boolean value);
    public abstract Builder incompatibleDisallowToplevelIfStatement(boolean value);
    public abstract Builder incompatibleNewActionsApi(boolean value);
    public abstract Builder incompatibleRemoveNativeGitRepository(boolean value);
    public abstract Builder incompatibleRemoveNativeHttpArchive(boolean value);
    public abstract Builder incompatibleStringIsNotIterable(boolean value);
    public abstract Builder internalSkylarkFlagTestCanary(boolean value);

    public abstract SkylarkSemantics build();
  }
}