diff --git a/src/lint/linter/ArcanistXHPASTLinter.php b/src/lint/linter/ArcanistXHPASTLinter.php
--- a/src/lint/linter/ArcanistXHPASTLinter.php
+++ b/src/lint/linter/ArcanistXHPASTLinter.php
@@ -34,10 +34,10 @@
   const LINT_ARRAY_INDEX_SPACING       = 28;
   const LINT_RAGGED_CLASSTREE_EDGE     = 29;
   const LINT_IMPLICIT_FALLTHROUGH      = 30;
-  const LINT_PHP_53_FEATURES           = 31;
+  const LINT_PHP_53_FEATURES           = 31; // Deprecated
   const LINT_REUSED_AS_ITERATOR        = 32;
   const LINT_COMMENT_SPACING           = 34;
-  const LINT_PHP_54_FEATURES           = 35;
+  const LINT_PHP_54_FEATURES           = 35; // Deprecated
   const LINT_SLOWNESS                  = 36;
   const LINT_CLOSING_CALL_PAREN        = 37;
   const LINT_CLOSING_DECL_PAREN        = 38;
@@ -47,9 +47,11 @@
   const LINT_ELSEIF_USAGE              = 42;
   const LINT_SEMICOLON_SPACING         = 43;
   const LINT_CONCATENATION_OPERATOR    = 44;
+  const LINT_PHP_COMPATIBILITY         = 45;
 
   private $naminghook;
   private $switchhook;
+  private $version;
 
   public function getInfoName() {
     return 'XHPAST Lint';
@@ -107,6 +109,7 @@
       self::LINT_ELSEIF_USAGE              => 'ElseIf Usage',
       self::LINT_SEMICOLON_SPACING         => 'Semicolon Spacing',
       self::LINT_CONCATENATION_OPERATOR    => 'Concatenation Spacing',
+      self::LINT_PHP_COMPATIBILITY         => 'PHP Compatibility',
     );
   }
 
@@ -170,6 +173,10 @@
           'Name of a concrete subclass of ArcanistXHPASTLintSwitchHook which '.
           'tunes the analysis of switch() statements for this linter.'),
       ),
+      'xhpast.php-version' => array(
+        'type' => 'optional string',
+        'help' => pht('PHP version to target'),
+      ),
     );
   }
 
@@ -181,6 +188,9 @@
       case 'xhpast.switchhook':
         $this->switchhook = $value;
         return;
+      case 'xhpast.php-version':
+        $this->version = $value;
+        return;
     }
 
     return parent::setLinterConfigurationValue($key, $value);
@@ -188,7 +198,7 @@
 
   public function getVersion() {
     // The version number should be incremented whenever a new rule is added.
-    return '6';
+    return '7';
   }
 
   protected function resolveFuture($path, Future $future) {
@@ -212,8 +222,6 @@
     $method_codes = array(
       'lintStrstrUsedForCheck' => self::LINT_SLOWNESS,
       'lintStrposUsedForStart' => self::LINT_SLOWNESS,
-      'lintPHP53Features' => self::LINT_PHP_53_FEATURES,
-      'lintPHP54Features' => self::LINT_PHP_54_FEATURES,
       'lintImplicitFallthrough' => self::LINT_IMPLICIT_FALLTHROUGH,
       'lintBraceFormatting' => self::LINT_BRACE_FORMATTING,
       'lintTautologicalExpressions' => self::LINT_TAUTOLOGICAL_EXPRESSION,
@@ -258,6 +266,7 @@
       'lintSemicolons' => self::LINT_SEMICOLON_SPACING,
       'lintSpaceAroundConcatenationOperators' =>
         self::LINT_CONCATENATION_OPERATOR,
+      'lintPHPCompatibility' => self::LINT_PHP_COMPATIBILITY,
     );
 
     foreach ($method_codes as $method => $codes) {
@@ -268,10 +277,9 @@
         }
       }
     }
-
   }
 
-  public function lintStrstrUsedForCheck(XHPASTNode $root) {
+  private function lintStrstrUsedForCheck(XHPASTNode $root) {
     $expressions = $root->selectDescendantsOfType('n_BINARY_EXPRESSION');
     foreach ($expressions as $expression) {
       $operator = $expression->getChildOfType(1, 'n_OPERATOR');
@@ -313,7 +321,7 @@
     }
   }
 
-  public function lintStrposUsedForStart(XHPASTNode $root) {
+  private function lintStrposUsedForStart(XHPASTNode $root) {
     $expressions = $root->selectDescendantsOfType('n_BINARY_EXPRESSION');
     foreach ($expressions as $expression) {
       $operator = $expression->getChildOfType(1, 'n_OPERATOR');
@@ -356,11 +364,92 @@
     }
   }
 
-  public function lintPHP53Features(XHPASTNode $root) {
+  private function lintPHPCompatibility(XHPASTNode $root) {
+    if (!$this->version) {
+      return;
+    }
 
+    $target = phutil_get_library_root('arcanist').
+      '/../resources/php_compat_info.json';
+    $compat_info = json_decode(file_get_contents($target), true);
+
+    $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL');
+    foreach ($calls as $call) {
+      $node = $call->getChildByIndex(0);
+      $name = $node->getConcreteString();
+      $version = idx($compat_info['functions'], $name);
+      $windows = idx($compat_info['functions_windows'], $name);
+      if ($version && version_compare($version['min'], $this->version, '>')) {
+        $this->raiseLintAtNode(
+          $node,
+          self::LINT_PHP_COMPATIBILITY,
+          "This codebase targets PHP {$this->version}, but `{$name}()` was ".
+          "not introduced until PHP {$version['min']}.");
+      } else if (array_key_exists($name, $compat_info['params'])) {
+        $params = $call->getChildOfType(1, 'n_CALL_PARAMETER_LIST');
+        foreach (array_values($params->getChildren()) as $i => $param) {
+          $version = idx($compat_info['params'][$name], $i);
+          if ($version && version_compare($version, $this->version, '>')) {
+            $this->raiseLintAtNode(
+              $param,
+              self::LINT_PHP_COMPATIBILITY,
+              "This codebase targets PHP {$this->version}, but parameter ".
+              ($i + 1)." of `{$name}()` was not introduced until PHP ".
+              "{$version}.");
+          }
+        }
+      } else if ($windows === '' || version_compare($windows, '5.3.0') > 0) {
+        $this->raiseLintAtNode(
+          $node,
+          self::LINT_PHP_COMPATIBILITY,
+          "This codebase targets PHP 5.3.0 on Windows, but `{$name}()` is not ".
+          "available there".
+          ($windows ? " until PHP {$windows}" : '').".");
+      }
+    }
+
+    $classes = $root->selectDescendantsOfType('n_CLASS_NAME');
+    foreach ($classes as $node) {
+      $name = $node->getConcreteString();
+      $version = idx($compat_info['interfaces'], $name);
+      $version = idx($compat_info['classes'], $name, $version);
+      if ($version && version_compare($version['min'], $this->version, '>')) {
+        $this->raiseLintAtNode(
+          $node,
+          self::LINT_PHP_COMPATIBILITY,
+          "This codebase targets PHP {$this->version}, but `{$name}` was not ".
+          "introduced until PHP {$version['min']}.");
+      }
+    }
+
+    // TODO: Technically, this will include function names. This is unlikely to
+    // cause any issues (unless, of course, there existed a function that had
+    // the same name as some constant).
+    $constants = $root->selectDescendantsOfType('n_SYMBOL_NAME');
+    foreach ($constants as $node) {
+      $name = $node->getConcreteString();
+      $version = idx($compat_info['constants'], $name);
+      if ($version && version_compare($version['min'], $this->version, '>')) {
+        $this->raiseLintAtNode(
+          $node,
+          self::LINT_PHP_53_FEATURES,
+          "This codebase targets PHP {$this->version}, but `{$name}` was not ".
+          "introduced until PHP {$version['min']}.");
+      }
+    }
+
+    if (version_compare($this->version, '5.3.0') < 0) {
+      $this->lintPHP53Features($root);
+    }
+
+    if (version_compare($this->version, '5.4.0') < 0) {
+      $this->lintPHP54Features($root);
+    }
+  }
+
+  private function lintPHP53Features(XHPASTNode $root) {
     $functions = $root->selectTokensOfType('T_FUNCTION');
     foreach ($functions as $function) {
-
       $next = $function->getNextToken();
       while ($next) {
         if ($next->isSemantic()) {
@@ -373,9 +462,9 @@
         if ($next->getTypeName() == '(') {
           $this->raiseLintAtToken(
             $function,
-            self::LINT_PHP_53_FEATURES,
-            'This codebase targets PHP 5.2, but anonymous functions were '.
-            'not introduced until PHP 5.3.');
+            self::LINT_PHP_COMPATIBILITY,
+            "This codebase targets PHP {$this->version}, but anonymous ".
+            "functions were not introduced until PHP 5.3.");
         }
       }
     }
@@ -384,9 +473,9 @@
     foreach ($namespaces as $namespace) {
       $this->raiseLintAtToken(
         $namespace,
-        self::LINT_PHP_53_FEATURES,
-        'This codebase targets PHP 5.2, but namespaces were not introduced '.
-        'until PHP 5.3.');
+        self::LINT_PHP_COMPATIBILITY,
+        "This codebase targets PHP {$this->version}, but namespaces were not ".
+        "introduced until PHP 5.3.");
     }
 
     // NOTE: This is only "use x;", in anonymous functions the node type is
@@ -399,9 +488,9 @@
     foreach ($uses as $use) {
       $this->raiseLintAtNode(
         $use,
-        self::LINT_PHP_53_FEATURES,
-        'This codebase targets PHP 5.2, but namespaces were not introduced '.
-        'until PHP 5.3.');
+        self::LINT_PHP_COMPATIBILITY,
+        "This codebase targets PHP {$this->version}, but namespaces were not ".
+        "introduced until PHP 5.3.");
     }
 
     $statics = $root->selectDescendantsOfType('n_CLASS_STATIC_ACCESS');
@@ -413,9 +502,9 @@
       if ($name->getConcreteString() == 'static') {
         $this->raiseLintAtNode(
           $name,
-          self::LINT_PHP_53_FEATURES,
-          'This codebase targets PHP 5.2, but `static::` was not introduced '.
-          'until PHP 5.3.');
+          self::LINT_PHP_COMPATIBILITY,
+          "This codebase targets PHP {$this->version}, but `static::` was not ".
+          "introduced until PHP 5.3.");
       }
     }
 
@@ -425,9 +514,9 @@
       if ($yes->getTypeName() == 'n_EMPTY') {
         $this->raiseLintAtNode(
           $ternary,
-          self::LINT_PHP_53_FEATURES,
-          'This codebase targets PHP 5.2, but short ternary was not '.
-          'introduced until PHP 5.3.');
+          self::LINT_PHP_COMPATIBILITY,
+          "This codebase targets PHP {$this->version}, but short ternary was ".
+          "not introduced until PHP 5.3.");
       }
     }
 
@@ -436,87 +525,14 @@
       if (preg_match('/^<<<[\'"]/', $heredoc->getConcreteString())) {
         $this->raiseLintAtNode(
           $heredoc,
-          self::LINT_PHP_53_FEATURES,
-          'This codebase targets PHP 5.2, but nowdoc was not introduced until '.
-          'PHP 5.3.');
+          self::LINT_PHP_COMPATIBILITY,
+          "This codebase targets PHP {$this->version}, but nowdoc was not ".
+          "introduced until PHP 5.3.");
       }
     }
-
-    $this->lintPHP53Functions($root);
   }
 
-  private function lintPHP53Functions(XHPASTNode $root) {
-    $target = phutil_get_library_root('arcanist').
-      '/../resources/php_compat_info.json';
-    $compat_info = json_decode(file_get_contents($target), true);
-    $required = '5.2.3';
-
-    $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL');
-    foreach ($calls as $call) {
-      $node = $call->getChildByIndex(0);
-      $name = $node->getConcreteString();
-      $version = idx($compat_info['functions'], $name);
-      $windows = idx($compat_info['functions_windows'], $name);
-      if ($version && version_compare($version['min'], $required, '>')) {
-        $this->raiseLintAtNode(
-          $node,
-          self::LINT_PHP_53_FEATURES,
-          "This codebase targets PHP 5.2.3, but `{$name}()` was not ".
-          "introduced until PHP {$version['min']}.");
-      } else if (array_key_exists($name, $compat_info['params'])) {
-        $params = $call->getChildOfType(1, 'n_CALL_PARAMETER_LIST');
-        foreach (array_values($params->getChildren()) as $i => $param) {
-          $version = idx($compat_info['params'][$name], $i);
-          if ($version && version_compare($version, $required, '>')) {
-            $this->raiseLintAtNode(
-              $param,
-              self::LINT_PHP_53_FEATURES,
-              "This codebase targets PHP 5.2.3, but parameter ".($i + 1)." ".
-              "of `{$name}()` was not introduced until PHP {$version}.");
-          }
-        }
-      } else if ($windows === '' || version_compare($windows, '5.3.0') > 0) {
-        $this->raiseLintAtNode(
-          $node,
-          self::LINT_PHP_53_FEATURES,
-          "This codebase targets PHP 5.3.0 on Windows, but `{$name}()` is not ".
-          "available there".
-          ($windows ? " until PHP {$windows}" : '').".");
-      }
-    }
-
-    $classes = $root->selectDescendantsOfType('n_CLASS_NAME');
-    foreach ($classes as $node) {
-      $name = $node->getConcreteString();
-      $version = idx($compat_info['interfaces'], $name);
-      $version = idx($compat_info['classes'], $name, $version);
-      if ($version && version_compare($version['min'], $required, '>')) {
-        $this->raiseLintAtNode(
-          $node,
-          self::LINT_PHP_53_FEATURES,
-          "This codebase targets PHP 5.2.3, but `{$name}` was not ".
-          "introduced until PHP {$version['min']}.");
-      }
-    }
-
-    // TODO: Technically, this will include function names. This is unlikely to
-    // cause any issues (unless, of course, there existed a function that had
-    // the same name as some constant).
-    $constants = $root->selectDescendantsOfType('n_SYMBOL_NAME');
-    foreach ($constants as $node) {
-      $name = $node->getConcreteString();
-      $version = idx($compat_info['constants'], $name);
-      if ($version && version_compare($version['min'], $required, '>')) {
-        $this->raiseLintAtNode(
-          $node,
-          self::LINT_PHP_53_FEATURES,
-          "This codebase targets PHP 5.2.3, but `{$name}` was not ".
-          "introduced until PHP {$version['min']}.");
-      }
-    }
-  }
-
-  public function lintPHP54Features(XHPASTNode $root) {
+  private function lintPHP54Features(XHPASTNode $root) {
     $indexes = $root->selectDescendantsOfType('n_INDEX_ACCESS');
     foreach ($indexes as $index) {
       $left = $index->getChildByIndex(0);
@@ -525,7 +541,7 @@
         case 'n_METHOD_CALL':
           $this->raiseLintAtNode(
             $index->getChildByIndex(1),
-            self::LINT_PHP_54_FEATURES,
+            self::LINT_PHP_COMPATIBILITY,
             'The f()[...] syntax was not introduced until PHP 5.4, but this '.
             'codebase targets an earlier version of PHP. You can rewrite '.
             'this expression using idx().');
@@ -694,7 +710,6 @@
   }
 
   private function lintBraceFormatting(XHPASTNode $root) {
-
     foreach ($root->selectDescendantsOfType('n_STATEMENT_LIST') as $list) {
       $tokens = $list->getTokens();
       if (!$tokens || head($tokens)->getValue() != '{') {
@@ -730,7 +745,6 @@
         }
       }
     }
-
   }
 
   private function lintTautologicalExpressions(XHPASTNode $root) {
@@ -791,7 +805,6 @@
     }
   }
 
-
   /**
    * Statically evaluate a boolean value from an XHP tree.
    *
@@ -1116,7 +1129,7 @@
     }
   }
 
-  protected function lintUndeclaredVariables(XHPASTNode $root) {
+  private function lintUndeclaredVariables(XHPASTNode $root) {
     // These things declare variables in a function:
     //    Explicit parameters
     //    Assignment
@@ -1480,7 +1493,7 @@
     return $concrete;
   }
 
-  protected function lintPHPTagUse(XHPASTNode $root) {
+  private function lintPHPTagUse(XHPASTNode $root) {
     $tokens = $root->getTokens();
     foreach ($tokens as $token) {
       if ($token->getTypeName() == 'T_OPEN_TAG') {
@@ -1518,8 +1531,7 @@
     }
   }
 
-  protected function lintNamingConventions(XHPASTNode $root) {
-
+  private function lintNamingConventions(XHPASTNode $root) {
     // We're going to build up a list of <type, name, token, error> tuples
     // and then try to instantiate a hook class which has the opportunity to
     // override us.
@@ -1773,7 +1785,7 @@
     }
   }
 
-  protected function lintSurpriseConstructors(XHPASTNode $root) {
+  private function lintSurpriseConstructors(XHPASTNode $root) {
     $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION');
     foreach ($classes as $class) {
       $class_name = $class->getChildByIndex(1)->getConcreteString();
@@ -1793,7 +1805,7 @@
     }
   }
 
-  protected function lintParenthesesShouldHugExpressions(XHPASTNode $root) {
+  private function lintParenthesesShouldHugExpressions(XHPASTNode $root) {
     $calls = $root->selectDescendantsOfType('n_CALL_PARAMETER_LIST');
     $controls = $root->selectDescendantsOfType('n_CONTROL_CONDITION');
     $fors = $root->selectDescendantsOfType('n_FOR_EXPRESSION');
@@ -1850,7 +1862,7 @@
     }
   }
 
-  protected function lintSpaceAfterControlStatementKeywords(XHPASTNode $root) {
+  private function lintSpaceAfterControlStatementKeywords(XHPASTNode $root) {
     foreach ($root->getTokens() as $id => $token) {
       switch ($token->getTypeName()) {
         case 'T_IF':
@@ -1897,7 +1909,7 @@
     }
   }
 
-  protected function lintSpaceAroundBinaryOperators(XHPASTNode $root) {
+  private function lintSpaceAroundBinaryOperators(XHPASTNode $root) {
     $expressions = $root->selectDescendantsOfType('n_BINARY_EXPRESSION');
     foreach ($expressions as $expression) {
       $operator = $expression->getChildByIndex(1);
@@ -1973,7 +1985,7 @@
     // declarations (which is not n_BINARY_EXPRESSION).
   }
 
-  protected function lintSpaceAroundConcatenationOperators(XHPASTNode $root) {
+  private function lintSpaceAroundConcatenationOperators(XHPASTNode $root) {
     $tokens = $root->selectTokensOfType('.');
     foreach ($tokens as $token) {
       $prev = $token->getPrevToken();
@@ -2004,7 +2016,7 @@
     }
   }
 
-  protected function lintDynamicDefines(XHPASTNode $root) {
+  private function lintDynamicDefines(XHPASTNode $root) {
     $calls = $root->selectDescendantsOfType('n_FUNCTION_CALL');
     foreach ($calls as $call) {
       $name = $call->getChildByIndex(0)->getConcreteString();
@@ -2021,7 +2033,7 @@
     }
   }
 
-  protected function lintUseOfThisInStaticMethods(XHPASTNode $root) {
+  private function lintUseOfThisInStaticMethods(XHPASTNode $root) {
     $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION');
     foreach ($classes as $class) {
       $methods = $class->selectDescendantsOfType('n_METHOD_DECLARATION');
@@ -2072,7 +2084,7 @@
    * you don't pass a second argument, you're probably going to get something
    * wrong.
    */
-  protected function lintPregQuote(XHPASTNode $root) {
+  private function lintPregQuote(XHPASTNode $root) {
     $function_calls = $root->selectDescendantsOfType('n_FUNCTION_CALL');
     foreach ($function_calls as $call) {
       $name = $call->getChildByIndex(0)->getConcreteString();
@@ -2105,7 +2117,7 @@
    *
    * The former exits with a failure code, the latter with a success code!
    */
-  protected function lintExitExpressions(XHPASTNode $root) {
+  private function lintExitExpressions(XHPASTNode $root) {
     $unaries = $root->selectDescendantsOfType('n_UNARY_PREFIX_EXPRESSION');
     foreach ($unaries as $unary) {
       $operator = $unary->getChildByIndex(0)->getConcreteString();
@@ -2138,7 +2150,7 @@
     }
   }
 
-  protected function lintTODOComments(XHPASTNode $root) {
+  private function lintTODOComments(XHPASTNode $root) {
     $comments = $root->selectTokensOfType('T_COMMENT') +
                 $root->selectTokensOfType('T_DOC_COMMENT');
 
@@ -2331,7 +2343,6 @@
     $calls = $calls->add($root->selectDescendantsOfType('n_METHOD_CALL'));
 
     foreach ($calls as $call) {
-
       // If the last parameter of a call is a HEREDOC, don't apply this rule.
       $params = $call
         ->getChildOfType(1, 'n_CALL_PARAMETER_LIST')
@@ -2441,7 +2452,8 @@
   private function lintStrings(XHPASTNode $root) {
     $nodes = $root->selectDescendantsOfTypes(array(
       'n_CONCATENATION_LIST',
-      'n_STRING_SCALAR'));
+      'n_STRING_SCALAR',
+    ));
 
     foreach ($nodes as $node) {
       $strings = array();
diff --git a/src/lint/linter/__tests__/xhpast/decl-parens-hug-closing.lint-test b/src/lint/linter/__tests__/xhpast/decl-parens-hug-closing.lint-test
--- a/src/lint/linter/__tests__/xhpast/decl-parens-hug-closing.lint-test
+++ b/src/lint/linter/__tests__/xhpast/decl-parens-hug-closing.lint-test
@@ -29,10 +29,7 @@
 warning:12:16
 warning:15:37
 warning:18:33
-disabled:22:3
-disabled:23:3
 warning:23:14
-disabled:24:3
 warning:24:14
 ~~~~~~~~~~
 <?php
diff --git a/src/lint/linter/__tests__/xhpast/embedded-tags.lint-test b/src/lint/linter/__tests__/xhpast/embedded-tags.lint-test
--- a/src/lint/linter/__tests__/xhpast/embedded-tags.lint-test
+++ b/src/lint/linter/__tests__/xhpast/embedded-tags.lint-test
@@ -1,5 +1,5 @@
 <?php $x ?>
-  
+
 This shouldn't fatal the parser.
 ~~~~~~~~~~
 error:1:10
\ No newline at end of file
diff --git a/src/lint/linter/__tests__/xhpast/index-function.lint-test b/src/lint/linter/__tests__/xhpast/index-function.lint-test
--- a/src/lint/linter/__tests__/xhpast/index-function.lint-test
+++ b/src/lint/linter/__tests__/xhpast/index-function.lint-test
@@ -1,4 +1,7 @@
 <?php
 f()[0];
 ~~~~~~~~~~
-disabled:2:5
+error:2:5
+~~~~~~~~~~
+~~~~~~~~~~
+{"config": {"xhpast.php-version": "5.3.0"}}
diff --git a/src/lint/linter/__tests__/xhpast/naming-conventions.lint-test b/src/lint/linter/__tests__/xhpast/naming-conventions.lint-test
--- a/src/lint/linter/__tests__/xhpast/naming-conventions.lint-test
+++ b/src/lint/linter/__tests__/xhpast/naming-conventions.lint-test
@@ -61,7 +61,6 @@
 warning:8:11
 warning:12:10
 warning:12:13
-disabled:24:1
 warning:26:13
 warning:30:3
 warning:31:3
diff --git a/src/lint/linter/__tests__/xhpast/no-segfault-on-abstract.lint-test b/src/lint/linter/__tests__/xhpast/no-segfault-on-abstract.lint-test
--- a/src/lint/linter/__tests__/xhpast/no-segfault-on-abstract.lint-test
+++ b/src/lint/linter/__tests__/xhpast/no-segfault-on-abstract.lint-test
@@ -1,4 +1,4 @@
 <?php
-abstract class A { }
-final class F { }
+abstract class A {}
+final class F {}
 ~~~~~~~~~~
diff --git a/src/lint/linter/__tests__/xhpast/nowdoc.lint-test b/src/lint/linter/__tests__/xhpast/nowdoc.lint-test
--- a/src/lint/linter/__tests__/xhpast/nowdoc.lint-test
+++ b/src/lint/linter/__tests__/xhpast/nowdoc.lint-test
@@ -3,4 +3,7 @@
 Hello World!
 EOT;
 ~~~~~~~~~~
-disabled:2:6
+error:2:6
+~~~~~~~~~~
+~~~~~~~~~~
+{"config": {"xhpast.php-version": "5.2.3"}}
diff --git a/src/lint/linter/__tests__/xhpast/php53.lint-test b/src/lint/linter/__tests__/xhpast/php53.lint-test
--- a/src/lint/linter/__tests__/xhpast/php53.lint-test
+++ b/src/lint/linter/__tests__/xhpast/php53.lint-test
@@ -11,10 +11,13 @@
 $a = 'stdClass';
 $a::m();
 ~~~~~~~~~~
-disabled:3:1
-disabled:4:5
-disabled:5:3
-disabled:6:3
-disabled:7:3
-disabled:8:1
-disabled:10:1
+error:3:1
+error:4:5
+error:5:3
+error:6:3
+error:7:3
+error:8:1
+error:10:1
+~~~~~~~~~~
+~~~~~~~~~~
+{"config": {"xhpast.php-version": "5.2.3"}}
diff --git a/src/lint/linter/__tests__/xhpast/php54.lint-test b/src/lint/linter/__tests__/xhpast/php54.lint-test
--- a/src/lint/linter/__tests__/xhpast/php54.lint-test
+++ b/src/lint/linter/__tests__/xhpast/php54.lint-test
@@ -7,5 +7,8 @@
 // $o->m()[0];
 
 ~~~~~~~~~~
-disabled:3:5
-disabled:4:9
+error:3:5
+error:4:9
+~~~~~~~~~~
+~~~~~~~~~~
+{"config": {"xhpast.php-version": "5.3.0"}}
diff --git a/src/lint/linter/__tests__/xhpast/reused-iterator-reference.lint-test b/src/lint/linter/__tests__/xhpast/reused-iterator-reference.lint-test
--- a/src/lint/linter/__tests__/xhpast/reused-iterator-reference.lint-test
+++ b/src/lint/linter/__tests__/xhpast/reused-iterator-reference.lint-test
@@ -129,9 +129,5 @@
 warning:52:3
 error:85:20
 error:87:3
-disabled:93:3
-disabled:99:3
-disabled:107:3
 warning:110:5
-disabled:117:3
 warning:120:3
diff --git a/src/lint/linter/__tests__/xhpast/switches.lint-test b/src/lint/linter/__tests__/xhpast/switches.lint-test
--- a/src/lint/linter/__tests__/xhpast/switches.lint-test
+++ b/src/lint/linter/__tests__/xhpast/switches.lint-test
@@ -89,7 +89,6 @@
 warning:53:3
 warning:57:3
 warning:66:3
-disabled:68:7 # PHP 5.3 features
 warning:71:3
 warning:75:3
 ~~~~~~~~~~
diff --git a/src/lint/linter/__tests__/xhpast/undeclared-variables.lint-test b/src/lint/linter/__tests__/xhpast/undeclared-variables.lint-test
--- a/src/lint/linter/__tests__/xhpast/undeclared-variables.lint-test
+++ b/src/lint/linter/__tests__/xhpast/undeclared-variables.lint-test
@@ -175,7 +175,6 @@
 }
 
 ~~~~~~~~~~
-disabled:3:1
 error:30:3
 error:32:3
 error:38:3