diff --git a/bazlets.bzl b/bazlets.bzl
index e14e488..f97b72c 100644
--- a/bazlets.bzl
+++ b/bazlets.bzl
@@ -1,17 +1,16 @@
 NAME = "com_googlesource_gerrit_bazlets"
 
 def load_bazlets(
-    commit,
-    local_path = None
-  ):
-  if not local_path:
-      native.git_repository(
-          name = NAME,
-          remote = "https://gerrit.googlesource.com/bazlets",
-          commit = commit,
-      )
-  else:
-      native.local_repository(
-          name = NAME,
-          path = local_path,
-      )
+        commit,
+        local_path = None):
+    if not local_path:
+        native.git_repository(
+            name = NAME,
+            remote = "https://gerrit.googlesource.com/bazlets",
+            commit = commit,
+        )
+    else:
+        native.local_repository(
+            name = NAME,
+            path = local_path,
+        )
diff --git a/prolog.bzl b/prolog.bzl
index b4723ae..0d1d1dd 100644
--- a/prolog.bzl
+++ b/prolog.bzl
@@ -1,72 +1,72 @@
 # Translating Prolog into WAM-based Intermediate Code
 def pl2am(name, src, out):
-  srcs = [
-    'src/compiler/package_fx.pl',
-    'src/compiler/pl2am.pl',
-    'src/builtin/system.pl',
-  ]
-  if not src in srcs:
-    srcs.append(src)
-  native.genrule(
-    name = name,
-    srcs = srcs,
-    cmd = " && ".join([
-      'ROOT=$$PWD',
-      'TMP=$$(mktemp -d || mktemp -d -t bazel-tmp)',
-      'echo "go :- '
-        + 'load_files(['
-          + "'$$ROOT/src/compiler/package_fx.pl',"
-          + "'$$ROOT/src/builtin/system.pl',"
-          + "'$$ROOT/src/compiler/pl2am.pl'"
-        + ']),'
-        + 'pl2am(['
-          + "'$$(basename %s)'," % src
-          + "'$$ROOT/$@',"
-          + '[ed,ac,ie,rc,idx]'
-        + ']).'
-        + '">$$TMP/go.pl',
-      'cd $$(dirname %s)' % src,
-      'swipl --traditional --quiet -g go,halt -t "halt(1)" $$TMP/go.pl',
-    ]),
-    outs = [out],
-  )
+    srcs = [
+        "src/compiler/package_fx.pl",
+        "src/compiler/pl2am.pl",
+        "src/builtin/system.pl",
+    ]
+    if not src in srcs:
+        srcs.append(src)
+    native.genrule(
+        name = name,
+        srcs = srcs,
+        cmd = " && ".join([
+            "ROOT=$$PWD",
+            "TMP=$$(mktemp -d || mktemp -d -t bazel-tmp)",
+            'echo "go :- ' +
+            "load_files([" +
+            "'$$ROOT/src/compiler/package_fx.pl'," +
+            "'$$ROOT/src/builtin/system.pl'," +
+            "'$$ROOT/src/compiler/pl2am.pl'" +
+            "])," +
+            "pl2am([" +
+            "'$$(basename %s)'," % src +
+            "'$$ROOT/$@'," +
+            "[ed,ac,ie,rc,idx]" +
+            "])." +
+            '">$$TMP/go.pl',
+            "cd $$(dirname %s)" % src,
+            'swipl --traditional --quiet -g go,halt -t "halt(1)" $$TMP/go.pl',
+        ]),
+        outs = [out],
+    )
 
 # Translating WAM-based Intermediate Code into Java
 def am2j(name, am, out):
-  native.genrule(
-    name = name,
-    srcs = [
-      am,
-      'src/compiler/am2j.pl',
-    ],
-    cmd = " && ".join([
-      'ROOT=$$PWD',
-      'TMP=$$(mktemp -d || mktemp -d -t bazel-tmp)',
-      'echo "go :- '
-        + 'load_files(['
-          + "'src/compiler/am2j.pl'"
-        + ']),'
-        + 'am2j(['
-          + "'$(location %s)'," % am
-          + "'$$TMP/java'"
-        + ']).'
-        + '">$$TMP/go.pl',
-      'mkdir $$TMP/java',
-      'swipl --traditional --quiet -g go,halt -t "halt(1)" $$TMP/go.pl',
-      'cd $$TMP/java',
-      'zip -qr $$ROOT/$@ .',
-    ]),
-    outs = [out],
-  )
+    native.genrule(
+        name = name,
+        srcs = [
+            am,
+            "src/compiler/am2j.pl",
+        ],
+        cmd = " && ".join([
+            "ROOT=$$PWD",
+            "TMP=$$(mktemp -d || mktemp -d -t bazel-tmp)",
+            'echo "go :- ' +
+            "load_files([" +
+            "'src/compiler/am2j.pl'" +
+            "])," +
+            "am2j([" +
+            "'$(location %s)'," % am +
+            "'$$TMP/java'" +
+            "])." +
+            '">$$TMP/go.pl',
+            "mkdir $$TMP/java",
+            'swipl --traditional --quiet -g go,halt -t "halt(1)" $$TMP/go.pl',
+            "cd $$TMP/java",
+            "zip -qr $$ROOT/$@ .",
+        ]),
+        outs = [out],
+    )
 
 def pl2j(name, src, out):
-  pl2am(
-    name = name + '_rule.am',
-    src = src,
-    out = name + '.am',
-  )
-  am2j(
-    name = name,
-    am = ':' + name + '_rule.am',
-    out = out,
-  )
+    pl2am(
+        name = name + "_rule.am",
+        src = src,
+        out = name + ".am",
+    )
+    am2j(
+        name = name,
+        am = ":" + name + "_rule.am",
+        out = out,
+    )
