diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 8fa5cb5..1b69685 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -1709,11 +1709,11 @@
       }
 
       if (attribute.getAllowedRuleClassesWarningPredicate()
-              != Predicates.<RuleClass>alwaysTrue()) {
+          != Predicates.<RuleClass>alwaysTrue()) {
         allowedWithWarning = attribute.getAllowedRuleClassesWarningPredicate().apply(ruleClass);
         if (allowedWithWarning) {
           reportBadPrerequisite(attribute, prerequisiteTarget.getTargetKind(), prerequisiteLabel,
-                  "expected " + attribute.getAllowedRuleClassesPredicate(), true);
+              "expected " + attribute.getAllowedRuleClassesPredicate(), true);
           return;
         }
       }
@@ -1722,13 +1722,13 @@
         String missingMandatoryProviders = getMissingMandatoryProviders(prerequisite, attribute);
         if (missingMandatoryProviders != null) {
           attributeError(
-                  attribute.getName(),
-                  "'" + prerequisite.getLabel() + "' does not have mandatory provider "
-                          + missingMandatoryProviders);
+              attribute.getName(),
+              "'" + prerequisite.getLabel() + "' does not have mandatory provider "
+                  + missingMandatoryProviders);
         }
       } else if (Boolean.FALSE.equals(allowed)) {
         reportBadPrerequisite(attribute, prerequisiteTarget.getTargetKind(), prerequisiteLabel,
-                "expected " + attribute.getAllowedRuleClassesPredicate(), false);
+            "expected " + attribute.getAllowedRuleClassesPredicate(), false);
       }
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
index a6eca3a..8561dfd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkAttr.java
@@ -100,10 +100,10 @@
 
   private static final String PROVIDERS_ARG = "providers";
   private static final String PROVIDERS_DOC =
-          "mandatory providers list. It should be either a list of providers, or a "
-                  + "list of lists of providers. Every dependency should provide ALL providers "
-                  + "from at least ONE of these lists. A single list of providers will be "
-                  + "automatically converted to a list containing one list of providers.";
+      "mandatory providers list. It should be either a list of providers, or a "
+          + "list of lists of providers. Every dependency should provide ALL providers "
+          + "from at least ONE of these lists. A single list of providers will be "
+          + "automatically converted to a list containing one list of providers.";
 
   private static final String SINGLE_FILE_ARG = "single_file";
 
@@ -212,18 +212,18 @@
   private static List<List<String>> getProvidersList(SkylarkList skylarkList) throws EvalException {
     List<List<String>> providersList = new ArrayList<>();
     String errorMsg = "Illegal argument: element in '%s' is of unexpected type. "
-            + "Should be list of string, but got %s. "
-            + "Notice: one single list of string as 'providers' is still supported.";
+        + "Should be list of string, but got %s. "
+        + "Notice: one single list of string as 'providers' is still supported.";
     for (Object o : skylarkList) {
       if (!(o instanceof SkylarkList)) {
         throw new EvalException(null, String.format(errorMsg, PROVIDERS_ARG,
-                EvalUtils.getDataTypeName(o, true)));
+            EvalUtils.getDataTypeName(o, true)));
       }
       for (Object value : (SkylarkList) o) {
         if (!(value instanceof String)) {
           throw new EvalException(null, String.format(errorMsg, PROVIDERS_ARG,
               "list with an element of type "
-                      + EvalUtils.getDataTypeNameFromClass(value.getClass())));
+                  + EvalUtils.getDataTypeNameFromClass(value.getClass())));
         }
       }
       providersList.add(((SkylarkList<?>) o).getContents(String.class, PROVIDERS_ARG));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java
index ab8d490..ae048a0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyBinary.java
@@ -76,7 +76,7 @@
     Runfiles commonRunfiles = collectCommonRunfiles(ruleContext, common, semantics);
 
     Runfiles.Builder defaultRunfilesBuilder = new Runfiles.Builder(ruleContext.getWorkspaceName())
-                                    .merge(commonRunfiles);
+        .merge(commonRunfiles);
     semantics.collectDefaultRunfilesForBinary(ruleContext, defaultRunfilesBuilder);
     Runfiles defaultRunfiles = defaultRunfilesBuilder.build();
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
index 34c66f1..2b01aec 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java
@@ -274,13 +274,13 @@
   }
 
   private NestedSet<Artifact> getTransitivePythonSourcesFromSkylarkProvider(
-          TransitiveInfoCollection dep) {
+      TransitiveInfoCollection dep) {
     SkylarkClassObject pythonSkylarkProvider = null;
     SkylarkProviders skylarkProviders = dep.getProvider(SkylarkProviders.class);
     try {
       if (skylarkProviders != null) {
         pythonSkylarkProvider = skylarkProviders.getValue(PYTHON_SKYLARK_PROVIDER_NAME,
-                SkylarkClassObject.class);
+            SkylarkClassObject.class);
       }
 
       if (pythonSkylarkProvider != null) {
@@ -292,11 +292,11 @@
           errorType = EvalUtils.getDataTypeNameFromClass(sourceFiles.getClass());
         }
         String errorMsg = "Illegal Argument: attribute '%s' in provider '%s' is "
-                + "of unexpected type. Should be a set, but got a '%s'";
+            + "of unexpected type. Should be a set, but got a '%s'";
         NestedSet<Artifact> pythonSourceFiles = SkylarkType.cast(
-                sourceFiles, SkylarkNestedSet.class, Artifact.class, null,
-                errorMsg, TRANSITIVE_PYTHON_SRCS, PYTHON_SKYLARK_PROVIDER_NAME, errorType)
-                .getSet(Artifact.class);
+            sourceFiles, SkylarkNestedSet.class, Artifact.class, null,
+            errorMsg, TRANSITIVE_PYTHON_SRCS, PYTHON_SKYLARK_PROVIDER_NAME, errorType)
+            .getSet(Artifact.class);
         return pythonSourceFiles;
       }
     } catch (EvalException e) {
