IntelliJ Rust 2022.2


Wsparcie językowe

Ponowne ładowanie modelu projektu

W wersji 2022.2 poprawiono sposób, w jaki IntelliJ Rust aktualizuje model projektu.

Wtyczka wykrywa teraz zmiany w plikach konfiguracyjnych, nawet jeśli nie są one zapisane na dysku. Ta zmiana powinna sprawić, że ponowne ładowanie modelu projektu będzie bardziej przewidywalne.

IntelliJ Rust uwzględnia teraz również zmiany w konfiguracji Cargo, pliku toolchain i skryptach budowania.

Po zmianie plików konfiguracyjnych pojawi się teraz przycisk Załaduj zmiany ładunku.

Ustawienia ponownego ładowania modelu projektu można też zmienić w Preferencje / Ustawienia | Kompilacja, wykonanie, wdrażanie | Narzędzia do budowania.

Domyślnie pole wyboru Załaduj ponownie projekt po zmianach w skryptach kompilacji jest zaznaczone i wybrana jest opcja Zmiany zewnętrzne. Oznacza to, że model projektu zostanie automatycznie ponownie załadowany tylko w przypadku zmian zewnętrznych (na przykład, gdy pojawią się zaktualizowane pliki z kontroli wersji). W przypadku wszelkich zmian wprowadzonych w IDE będzie dostępny przycisk Załaduj zmiany ładunku, który umożliwia ręczne załadowanie zmian.

Przy wybraniu opcji Wszelkie zmiany, model projektu zostanie automatycznie zaktualizowany o wszystkie zmiany.

Ustawienia Cargo zostały przeniesione do Preferencji / Ustawienia | Kompilacja, wykonanie, wdrażanie | Narzędzia do budowania | Ładunek zapewniając spójność z innymi ustawieniami narzędzi do budowania.

Poprawa wydajności wywołań makr

Zrezygnowano z niepotrzebnego unieważnienia pamięci podręcznej. W rezultacie, przy wpisywaniu wywołania makr, uzupełnianie i podświetlanie powinno teraz działać szybciej.

Poprawy wnioskowania o typie

W tym cyklu wydawniczym wprowadzono różne poprawki i ulepszenia dotyczące wnioskowania o typie:

  • W silniku wnioskowania o typie zaimplementowano wymuszenia. To naprawia błędy nieprawidłowo pozytywne, takie jak niezgodność typów między Box<[u8]> i Box<[u8; 4]>.
  • Naprawiono wnioskowanie o typach parametrów zamknięcia, gdy zamknięcie jest przypisane do zmiennej, a typy parametrów są wywnioskowane po przypisaniu.
  • Naprawiono użycie operatora ? z cechą Try. Niestabilna cecha Try została przeniesiona do core::ops::try_trait::Try, a nazwy powiązanych typów zostały zmienione. To rozwiązało wiele problemów. Na przykład teraz operator ? działa dla Poll.
  • Zapętlenie parametru typu implementującego cechę Iterator zostało naprawione i teraz działa zgodnie z oczekiwaniami.
  • Niedawno dodana niestabilna cecha Destruct jest teraz dostępna dla wszystkich typów.
  • Wtyczka uwzględnia teraz negatywny impl podczas wnioskowania o typach.
  • Wnioskowanie o typie powinno teraz działać szybciej dzięki zmianom w sposobie obsługi typowych przypadków wnioskowania o typie.

Wykrywanie błędów kompilatora

IntelliJ Rust wykrywa teraz więcej błędów kompilatora:

  • Podejmowana próba importu zawartości, podczas gdy zewnętrzna skrzynia o tej nazwie została już zaimportowana.
  • Nazwa wybrana dla zewnętrznej skrzyni jest w konflikcie z inną zewnętrzną skrzynią, która została zaimportowana do bieżącego modułu.
  • Nazwa deklaracji towaru jest w konflikcie z nazwą zewnętrznej skrzyni.
  • Słowo kluczowe self nie może występować samodzielnie jako ostatni segment w deklaracji użycia.
  • Autoimport pojawia się na liście więcej niż raz.
  • Dokonano nieprawidłowego importu własnego.
  • Widoczność jest ograniczona do modułu, który nie jest przodkiem aktualnego elementu.

Poprawiono również wykrywanie duplikatów definicji.

Obsługa #![recursion_limit] w rozwiązywaniu nazw

IntelliJ Rust bierze teraz pod uwagę atrybut #![recursion_limit], który kontroluje głębokość rozszerzania makr. Wcześniej wtyczka używała domyślnej wartości limitu rekurencji, która wynosiła 128 kroków. Ale niektóre makra wymagają więcej kroków, a ta poprawka umożliwia ich rozszerzenie.

Gdy nie ma potrzeby używania makr do pełnego rozwinięcia, można dostosować ustawienie Maksymalny limit rekurencji dla rozwijania makr.

Wgląd w kod

Kontrole zależności w Cargo.toml

Domyślnie włączono dwie inspekcje zależności w Cargo.toml: Nieprawidłowa wersja skrzynki i Dostępna nowa wersja skrzynki.

Inspekcja nieprawidłowych wersji skrzynek wykrywa skrzynki zależności z nieprawidłowymi wersjami w Cargo.toml.

Kontrola dostępności nowej wersji skrzynki informuje, że dostępna jest nowsza wersja skrzynki. Istnieje również szybka poprawka, aby zaktualizować wersję skrzynki, która jest dostępna z wyskakującego okienka inspekcji. Można zobaczyć wszystkie dostępne szybkie poprawki, naciskając ⌥↩ (Alt+Enter).

Można kontrolować ustawienia inspekcji w Preferencje / Ustawienia | Redaktor | Inspekcje | Rdza. Tutaj można wyłączyć inspekcje, zmienić poziom ważności dla konkretnej inspekcji (wyświetlany ikonami w IDE) lub wybrać sposób podświetlania odpowiedniego kodu w edytorze.

Kontrole pod kątem unused_must_use i clippy::double_must_use

Inspekcje i szybkie poprawki dla:

  • lint unused_must_use, które wykrywa nieużywane wyniki typu oznaczonego jako #[must_use],
  • lint clippy::double_must_use, który sprawdza atrybut #[must_use] bez dalszych informacji o funkcjach i metodach, które zwracają typ już oznaczony jako #[must_use].

Konwersja JSON na typy Rust za pomocą kopiowania i wklejania

Przy kopiowaniu danych JSON i wklejaniu ich w edytorze, IDE sugeruje przekonwertowanie ich na typ struktury. Wszystkie niezbędne znaczniki pól struktury będą generowane i dodawane automatycznie.

Zmiana nazwy refaktoryzacji dla metazmiennych w makrach

Refaktoryzacja zmiany nazwy działa teraz dla metazmiennych w makrach.

Wyróżnianie adresów URL w literałach ciągów

Adresy URL w literałach ciągów znaków są teraz podświetlane po najechaniu na nie kursorem i można je otwierać w przeglądarce. Aby otworzyć łącze, należy nacisnąć klawisz ⌘ (Ctrl) i kliknąć łącze.

Uruchom/Debuguj

Jeśli opcja Emuluj terminal w konsoli wyjściowej jest włączona, odpowiedni terminal jest teraz używany w zakładce Uruchom. Ta opcja działa teraz również w systemie Windows.

Można włączyć opcję Emuluj terminal w konsoli wyjściowej w ustawieniach konfiguracji Uruchamiania.