ReSharper C++ 2021.1


Powitajcie pierwsze główne wydanie ReSharpera C++ w tym roku!

ReSharper C++ 2021.1 zapewnia obsługę kilku nowych funkcji językowych C++ 17 i C++ 20, dodaje nowe inspekcje i poprawia wsparcie silnika Unreal Engine. Można teraz skonfigurować ReSharper C++, aby jeszcze bardziej pasował do Twojego stylu kodu dzięki nowemu zestawowi ustawień styli składni. Towarzyszące szybkie poprawki i akcje kontekstowe pomagają zachować spójność stylu kodu i łatwo go aktualizować.

Dla osób niecierpliwych przedstawiam skrócone i wypunktowane funkcjonalności i usprawnienia jakie dodano w wersji 2021.1:

  • Wsparcie C++: typy klas w parametrach szablonów bez typów, reguły dedukcji argumentów szablonów klas C ++ 20, noexcept jako część typu funkcji i uzupełnianie kodu dla coroutines.
  • Unreal Engine: początkowe wsparcie dla Unreal Engine 5, szablon postfiksa dla Cast i obsługa makra odbicia RIGVM_METHOD.
  • Styl składni: nowy zestaw ustawień stylu kodu dla różnych aspektów składni C ++ z towarzyszącymi inspekcjami, szybkimi poprawkami i akcjami kontekstowymi.
  • Porządkowanie kodu: nowe zadania porządkowania kodu, akcja kontekstu „Cleanup” i ulepszenia wydajności.
  • Analiza kodu: inspekcje z szybkimi poprawkami dla nadmiarowych rzutów, argumenty szablonów, które można wywnioskować, oraz zmienne, które można przenieść do zakresu wewnętrznego.
  • Inne zmiany: lista wykluczeń dla zagregowanych wskazówek dotyczących inicjalizacji, ulepszona obsługa różnych celów platformy.

Obsługa C++

Przed C ++ 20 parametry szablonów bez typów były ograniczone do skalarnych typów nie zmiennoprzecinkowych. ReSharper C ++ 2021.1 dodaje obsługę typów klas w parametrach szablonów bez typów. Dzięki tej funkcji C ++ 20 można używać własnych klas w typach parametrów szablonu, gdy klasa spełnia określone wymagania.

Kolejnym użytecznym dodatkiem jest obsługa reguł CTAD w języku C ++ 20 – dedukcja argumentów z szablonu klasy jest teraz spójna i działa w przypadku szablonów agregacji, aliasów typów i konstruktorów dziedziczonych.

Od C ++ 17 specyfikacja noexcept była uważana za część typu funkcji, a ReSharper C ++ teraz w pełni obsługuje nową semantykę specyfikacji wyjątków.

ReSharper C ++ dodał obsługę programów w aktualizacji 2018.2, ale uzupełnianie kodu nie obejmowało obsługi składni związanej z korektami w C ++ 20. Teraz co_await, co_yield i co_return są dostępne zarówno w podstawowym uzupełnianiu kodu, jak i jako szablony uzupełniania Postfix.

Unreal Engine

Wprowadzono wstępne wsparcie dla Unreal Engine 5 na podstawie opinii zespołu Epic Games. Oznacza to, że będziesz mógł wypróbować nowe funkcje, gdy tylko Unreal Engine 5 zostanie oficjalnie wydany.

Cast Unreal Engine’a do dynamicznego rzutowania bezpiecznego dla typów jest teraz dostępny jako szablon postfix w uzupełnianiu kodu.

W 2021.1 dodaliśmy obsługę innego makra odbicia specyficznego dla silnika Unreal Engine, RIGVM_METHOD. ReSharper C ++ teraz obsługuje to poprawnie.

Styl składni

Jednym z aspektów stylu kodu jest użycie wymiennych elementów składni języka.
W wersji 2021.1 wprowadziliśmy zbiór ustawień stylu składni, których można użyć do skonfigurowania narzędzia ReSharper C ++ w celu dopasowania do wybranego stylu kodu. Dzięki inspekcjom pomocniczym, szybkim poprawkom i akcjom kontekstowym możesz łatwo wymusić wybrany styl składni w kodzie.

Zwykłe lub końcowe typy zwracane, typedef lub aliasy typów, „East const” lub „West const”, wirtualna lub przesłonięta, czy jedno i drugie? Można dostosować wszystkie te preferencje, a nawet więcej, w Options | Code Editing | C ++ | Syntax Style. Istnieją szczegółowe opcje dla każdego przypadku. Na przykład mamy oddzielne preferencje dotyczące wymuszania automatycznego użycia dla typów numerycznych i nieliczbowych. Tutaj możesz ustawić ustawienie stylu składni na „Never”, jeśli wolisz typy jawne, na „Always”, jeśli stosujesz styl „Almost Always Auto”, lub „When type is evident”, co oznacza, że ​​specyfikator automatyczny zostanie wprowadzony tylko wtedy, gdy typ wywnioskowany jest oczywisty z wyrażenia inicjatora.

Kiedy ważność ustawienia stylu składni jest ustawiona na sugestię, wskazówkę lub nawet ostrzeżenie, ReSharper C ++ podświetli naruszenia stylu i zaoferuje szybkie poprawki, które pomogą je wyeliminować. Menu kontekstowe inspekcji umożliwia również wygodną zmianę wartości właściwości stylu składni bez konieczności otwierania okna dialogowego opcji.

Czy kiedykolwiek myślałeś o wypróbowaniu końcowych typów zwracanych wszędzie dla zachowania spójności lub przełączeniu się z tradycyjnego „West const” na alternatywne „East const”, ale nie chcesz tracić czasu na migrację bazy kodu do nowej składni? Dzięki ReSharper C ++ wszystkie szybkie poprawki w stylu składni można zastosować w zakresie: w całym projekcie / rozwiązaniu lub w zakresach lokalnych, takich jak treść funkcji lub definicja klasy.

Włączenie wszystkich inspekcji stylów składni może być przytłaczające, dlatego zadbaliśmy o to, aby działania kontekstowe były zawsze dostępne do dostrojenia kodu, nawet jeśli wyciszyłeś odpowiednie inspekcje.

Aby naprawić wszystkie naruszenia stylu składni w określonym zakresie, możesz użyć czyszczenia kodu lub dedykowanego narzędzia ReSharper | Edit |Apply Syntax Style. W zależności od bieżącego kontekstu ta akcja naprawi problemy ze stylem składni w zaznaczeniu, w całym bieżącym pliku lub w zestawie plików wybranych w Solution Explorer.

Analiza kodu

ReSharper C ++ powiadomia teraz, gdy zmienna zostanie zadeklarowana przed zakresem, w którym jest używana. W takim przypadku możesz użyć dostarczonej szybkiej poprawki, aby przenieść zmienną i ograniczyć jej zakres.

Kolejna nowa inspekcja wykrywa zbędne wyrażenia rzutowania, które można bezpiecznie usunąć z kodu bez zmiany jego semantyki.

ReSharper C ++ 2021.1 podkreśla zbędne argumenty szablonu, które mogą być wywnioskowane przez język zgodnie z regułami dedukcji argumentów z szablonu klasy C ++ 17.

Dodano też kilka szybkich poprawek błędów konwersji. ReSharper C ++ zasugeruje jedną z konwersji odpowiednią dla bieżącego kontekstu (c_str (), to_string (), get (), value (), data (), operator *, operator &, dynamic_cast <> lub static_cast <>, itd. ), aby rozwiązać problem.

Inne zmiany

ReSharper C ++ 2020.3 dodał tryb widoczności Push-to-Hint, w którym podpowiedzi są domyślnie ukryte, aby zaoszczędzić miejsce w edytorze, ale można je wyświetlić po naciśnięciu klawisza. Możesz teraz szybko zmienić tryb widoczności dla różnych typów wskazówek z menu kontekstowego Alt + Enter.

Dodano również listę zatrzymań wzorców klas, dla których zagregowane wskazówki dotyczące inicjalizacji będą zawsze ukryte. Nową listę zatrzymań można znaleźć wraz z innymi powiązanymi ustawieniami na nowej stronie opcji Environment | Inlay Hints | C ++ | Aggregate Initialization. Dla wygody możesz też szybko dodać nazwę klasy do listy zatrzymań z menu kontekstowego:

ReSharper C ++ 2021.1 poprawia również obsługę różnych celów platformy. Obsługiwana jest teraz składnia wbudowanego asemblera GCC, a także kilka nowych rozszerzeń językowych, w tym __has_feature i __builtin_const_p. ReSharper C ++ również wstępnie definiuje poprawne makra platformy na platformach ARM i ARM64 MSVC oraz rozpoznaje zestaw narzędzi oparty na Clang używany w Microsoft Flight Simulator SDK.