리팩토링 #6: Rector를 사용하여 Laravel의 코드 품질 향상
11596 단어 laravelrefactoringphpwebdev
젠장, 대담하네. 나는 내 프로젝트 중 하나에 그것을 실행하면서 생각했다. getrector.org에서 그들의 첫 번째 페이지 지침을 읽는 동안 나는 가능한 한 밤새 전체 프로젝트에 뛰어들어 리팩토링하기로 결정했습니다.
저는 PHP 7.4 환경에서 Laravel 8 프로젝트를 실행하고 있으며 간단한 코드 품질 개선을 처리하는 다음과 같은 간단한 구성으로 시작했습니다.
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths([
__DIR__ . '/app'
]);
$rectorConfig->importNames();
$rectorConfig->sets([
LevelSetList::UP_TO_PHP_74,
SetList::CODE_QUALITY,
]);
};
위의 코드를 이해하지 못하더라도 걱정하지 마십시오. 저는 30분 전에도 이해하지 못했습니다 😂.
vendor/bin/rector --dry-run
를 실행한 후, 어쨌든 직접 수행하지 않을 작은 업그레이드를 즉시 확인했습니다.클래스 이름 자동 가져오기
/**
- *
- * @return \Illuminate\Broadcasting\Channel|array
- */
+ *
+ * @return Channel|array
+ */
public function broadcastOn()
이 변경 사항은
$rectorConfig->importNames();
구성에서 제공되며 생명의 은인입니다. 대부분의 코딩 표준은 짧은 클래스 이름을 선호하므로 전체 프로젝트에서 클래스를 자동으로 가져오는 것이 큰 도움이 됩니다.문자열 클래스 이름을 클래스 상수로 변경
public function user() {
- return $this->belongsTo('App\User');
+ return $this->belongsTo(User::class);
}
이것은 대부분이 오늘날까지 여전히 문자열 버전을 사용하기 때문에 오래된 Laravel 프로젝트에 환상적입니다. IDE가
User::class
버전을 훨씬 더 잘 지원하기 때문에 훌륭한 업그레이드입니다.PHP 7.4의 화살표 함수
$schedule->command('dummy-command')
->daily()
- ->when(function () {
- return \Carbon\Carbon::now()->endOfWeek()->isToday();
- });
+ ->when(fn() => Carbon::now()->endOfWeek()->isToday());
화살표 함수가 PHP 7.4에 도입된 것도 몰랐고 언어 업그레이드 없이도 사용할 수 있었습니다. 이제 나는 단일 교장 명령으로 그들의 힘을 활용할 수 있습니다.
인라인 쓸모없는 변수
- $phone = str_replace(' ', '', $phone);
- return $phone;
+ return str_replace(' ', '', $phone);
이것은 또 다른 낮은 매달린 과일입니다. 여기서
$phone
변수는 코드 품질에 아무 것도 추가하지 않으므로 안전하게 제거할 수 있습니다.대입 연산자 결합
- $this->order_count = $this->order_count + 1;
+ $this->order_count += 1;
이것도 쉬운편입니다. 제 생각에는 짧은 버전이 항상 더 좋습니다.
if return 문을 단순화하십시오.
- if ($user->company_id == $this->id) {
- return true;
- }
-
- return false;
+ return $user->company_id == $this->id;
나는 당신이 거의 항상 이것을 하고 싶어한다고 생각합니다. 그것은 눈에 보기 쉽고 논리를 더 빨리 이해하는 데 도움이 되는 아름다운 한 줄짜리입니다.
그러나 기존 방법이 더 적합한 파일 중 하나에서 서식이 손상되는 경우 다음과 같은 주석을 추가하여 이 규칙을 무시할 수 있습니다.
/** @noRector \Rector\CodeQuality\Rector\If_\SimplifyIfReturnBoolRector */
.JSON 작업에서 오류 발생
public function setImageUrlsAttribute($value)
{
- $this->attributes['image_urls'] = json_encode($value);
+ $this->attributes['image_urls'] = json_encode($value, JSON_THROW_ON_ERROR);
}
이 추가 매개변수를 사용하면 JSON 인코딩 또는 디코딩이 잘못될 때 반환되지 않고
null
대신 예외가 발생합니다. 나는 이것이 마음에 들지만 아직 내 코드에서 이 최적화를 수행할 준비가 되었는지 완전히 확신할 수 없습니다. 이것은 예외를 던지기 때문에 약간 지쳐서 나중에 저장하겠습니다.this configuration 을 사용하여 특정 규칙을 무시할 수 있습니다.
압축 용도를 배열로 변환
$user= auth()->user();
$credits= $user->credits()->latest()->get();
- return view('user.credits', compact('user', 'credits'));
+ return view('user.credits', ['user' => $user, 'credits' => $credits]);
오늘 저는 it's not ideal 을 나타내는
compact()
함수와 반패턴을 사용하는 것에 대한 의견이 있다는 것을 배웠습니다. 이것에 대해 어떻게 생각하는지 잘 모르겠지만 이 리팩토링을 유지하고 흐름을 따라 가고 있습니다. 평범한 오래된 배열에는 아무런 문제가 없습니다. 맞습니까?실제로 다른 많은 작은 업그레이드도 있습니다. 이것은 위에서 한 줄로 가져온
CODE_QUALITY
규칙에서 온 것임을 잊지 마십시오. 30+ other categories이 있어 사용하고 그들이 무엇을 제공하는지 보고 싶습니다.이 시점에서
vendor/bin/rector
를 실행하면 모든 테스트가 여전히 통과, 커밋, 푸시 및 배포됩니다. 지금은 모두 잘 생산되고 있습니다 😁.
Reference
이 문제에 관하여(리팩토링 #6: Rector를 사용하여 Laravel의 코드 품질 향상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/genijaho/improve-code-quality-in-laravel-using-rector-2fa0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)