Почему Scrutinizer говорит «дублирующий код», когда эти два метода совершенно разные? Является ли это ложноположительным или же Scrutinizer действительно хочет видеть это более абстрактным образом?Почему Scrutinizer говорит «дублировать код», когда код совершенно другой?
ответ
Моя догадка, что они делают то, что называется «Нормализация», то есть текст разбивается на более мелкие части (так называемые маркеры), а затем некоторые из этих маркеров заменяются другим текстом, чтобы сделать их все одна и та же. Например, все числа и строки нормированы на то же число/строку.
Это гарантирует, что вы можете найти клоны, которые отличаются только литералами, что полезно, поскольку это обычно означает, что вы можете извлечь утилитный метод, который принимает эти разные литералы в качестве параметра и, таким образом, уменьшает избыточность вашего кода.
Так детектору клон, ваш код будет выглядеть примерно так (весь прописной текст нормализуется):
public function IDENTIFIER($VARIABLE1) {
$VARIABLE2 = $this->database->prepare(STRING);
$VARIABLE2->execute(ARRAY_EXPRESSION);
if ($VARIABLE2->rowCount() == INTEGER) {
return BOOLEAN;
}
return BOOLEAN;
}
Обе функции будет нормализована к этому точно такому же представлению и детектор клона будет выбрать это как дублированный код.
Единственный разумный рефакторингом я могу видеть, для вашего кода будет извлечь вспомогательную функцию, которая обрабатывает подготовки и выполнение запроса и возвращает количество строк:
public function executeRowCountQuery($query_string, $query_variables) {
$query = this->database->prepare($query_string);
$query->execute($query_variables);
return $query->rowCount();
}
Это может иметь смысл, если у вас есть много различных запросы, которые интересуются только количеством строк.
Это лучше, чтобы отключить проверку на всех в .scrutinizer.yml
checks:
php:
duplication: false
Это ложный положительный результат. Я очень сомневаюсь, что проверяющий смотрит на * семантику * при выполнении этой эвристической проверки. – user2864740
@Sliq, пожалуйста, добавьте описание в тег scrutinizer – Jasen
общая черта, которую я вижу, - это глубина отступа и первый токен на каждой строке. – Jasen