mirror of
https://we.phorge.it/source/arcanist.git
synced 2025-01-26 14:38:18 +01:00
14d49d2565
Summary: Xcode (a popular code editor on Mac OS X) has no facility to trim trailing whitespace automatically. This adds a new lint severity "AUTOFIX" that's between WARNING and ERROR. When running the linter, any lint message whose severity is AUTOFIX will automatically be patched. Furthermore, if all lint messages returned from the engine are AUTOFIX, we'll automatically amend HEAD with the patch. Test Plan: arc lint on files with and without trailing whitespace, with and without UTF-8 contents to confirm those still error Reviewers: epriestley, jungejason Reviewed By: epriestley CC: aran Differential Revision: https://secure.phabricator.com/D2125
113 lines
2.5 KiB
PHP
113 lines
2.5 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Copyright 2012 Facebook, Inc.
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
/**
|
|
* A group of @{class:ArcanistLintMessage}s that apply to a file.
|
|
*
|
|
* @group lint
|
|
*/
|
|
final class ArcanistLintResult {
|
|
|
|
protected $path;
|
|
protected $data;
|
|
protected $filePathOnDisk;
|
|
protected $messages = array();
|
|
protected $effectiveMessages = array();
|
|
private $needsSort;
|
|
|
|
public function setPath($path) {
|
|
$this->path = $path;
|
|
return $this;
|
|
}
|
|
|
|
public function getPath() {
|
|
return $this->path;
|
|
}
|
|
|
|
public function addMessage(ArcanistLintMessage $message) {
|
|
$this->messages[] = $message;
|
|
$this->needsSort = true;
|
|
return $this;
|
|
}
|
|
|
|
public function getMessages() {
|
|
if ($this->needsSort) {
|
|
$this->sortAndFilterMessages();
|
|
}
|
|
return $this->effectiveMessages;
|
|
}
|
|
|
|
public function setData($data) {
|
|
$this->data = $data;
|
|
return $this;
|
|
}
|
|
|
|
public function getData() {
|
|
return $this->data;
|
|
}
|
|
|
|
public function setFilePathOnDisk($file_path_on_disk) {
|
|
$this->filePathOnDisk = $file_path_on_disk;
|
|
return $this;
|
|
}
|
|
|
|
public function getFilePathOnDisk() {
|
|
return $this->filePathOnDisk;
|
|
}
|
|
|
|
public function isPatchable() {
|
|
foreach ($this->messages as $message) {
|
|
if ($message->isPatchable()) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function isAllAutofix() {
|
|
foreach ($this->messages as $message) {
|
|
if (!$message->isAutofix()) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private function sortAndFilterMessages() {
|
|
$messages = $this->messages;
|
|
|
|
foreach ($messages as $key => $message) {
|
|
if ($message->getObsolete()) {
|
|
unset($messages[$key]);
|
|
continue;
|
|
}
|
|
}
|
|
|
|
$map = array();
|
|
foreach ($messages as $key => $message) {
|
|
$map[$key] = ($message->getLine() * (2 << 12)) + $message->getChar();
|
|
}
|
|
asort($map);
|
|
$messages = array_select_keys($messages, array_keys($map));
|
|
|
|
$this->effectiveMessages = $messages;
|
|
$this->needsSort = false;
|
|
|
|
}
|
|
|
|
}
|