Podświetlanie składni Visual Studio 2015 JSX/ES2015
Jak uzyskać prawidłowe podświetlenie składni w Visual Studio 2015 dla JSX z kodem ES2015?
Działa dobrze, jeśli usunę import
i export
Słowa kluczowe:
Właśnie zaktualizowałem Visual Studio 2015 Enterprise Update 1, ale nadal pozostaje taka sama.
6 answers
Aktualizacja (2017-02)
Node Tools for Visual Studio (NTVS) używa silnika analizy Salsa od wersji 1.2 i używanie NTVS jest prawdopodobnie ścieżką najmniejszego oporu dla wsparcia JSX.
Https://github.com/Microsoft/nodejstools
Przeczytaj (i głosuj) tę odpowiedź, aby uzyskać więcej szczegółów: https://stackoverflow.com/a/41996170/9324
ORYGINALNA ODPOWIEDŹ
Natknąłem się na ten sam problem i znalazłem dwa rozwiązania - jedno wykorzystujące ReSharper i jedno modyfikujące zewnętrzne narzędzia webowe Visual Studio.
Rozwiązanie 1
W ReSharper 10:
- otwórz Opcje okno dialogowe
- pod edycja kodu > JavaScript > Inspections wybierz ECMAScript 6 na poziomie JavaScript language level z listy rozwijanej
- upewnij się, że Włącz składnię JSX w .Opcja js files jest również zaznaczona (zakładając, że używasz JSX składnia).
- należy również wyłączyć błędy składni javascript w Visual Studio w następujący sposób:
- przejdź do Narzędzia > Opcje > edytor tekstu > JavaScript > IntelliSense
- odznacz pole Pokaż błędy składni i ok.
- reload the VS solution
Po przeładowaniu roztworu, czerwone squigglie zniknęły za mną. Jednak podświetlanie składni JSX nie działa. Segment otwierający dowolne elementy deklaruję w funkcji render
nie mają odpowiedniej kolorystyki - ale łatwo mi to zignorować.
Powinienem również wspomnieć, że pliki javascript muszą mieć .js rozszerzenie. Jeśli dasz im .rozszerzenie jsx , otrzymasz czerwone squigglies na pierwszej instrukcji importu. Komunikat o błędzie to JSX Parser: illegal import declaration
. (Można to naprawić za pomocą rozwiązania #2 poniżej)
Aktualizacja: Dzięki @SntsDev za to obejście Istnieje sposób, aby uniknąć nazywania .jsx pliki jako .js :
- W Visual Studio przejdź do Opcje > edytor tekstu > rozszerzenie pliku
- dodaj jsx i przypisz go do Javascript Editor
Rozwiązanie 2
Ciekawość wzięła górę ode mnie i chciałem zbadać, czy istnieje rozwiązanie non-ReSharper. Visual Studio używa lokalnie działającego modułu serwera węzłów o nazwie react-server
do analizy JSX w locie. Moduł ten można znaleźć tutaj:
C:\Program Files (x86)\Microsoft Visual Studio
14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External\react-server
Aktualizacja programu Visual Studio 2015 Update 3
Dzięki @TheQuickBrownFox za komentarz / aktualizację.
W aktualizacji 3, lokalizacja poleceń react-server
znajduje się teraz w tym pliku:
C:\Program Files (x86)\Microsoft Visual Studio
14.0\Web\External\vs-task-server\react-commands.js
Dalej analizując plik server.js
lub react-commands.js
z wyżej wymienionych folderów, istnieje funkcja o nazwie transformJsxFromPost
lub transformJsx
. Metoda ta zawiera następujący wiersz: var transformed = reactTools.transformWithDetails(code, { elementMap: true });
. Jest to odniesienie do modułu react-tools
( https://www.npmjs.com/package/react-tools ), który ma więcej opcji do parsowania ES6.
Dlatego:
-
Zastąp tę linię:
var transformed = reactTools.transformWithDetails(code, { elementMap: true });
-
Z następującym:
var transformed = reactTools.transformWithDetails(code, { elementMap: true, es6module: "--es6module", harmony: "--harmony" });
Zwróć uwagę na dodanie znaczników
--es6module
i--harmony
, które instruująreact-tools
, aby traktować kod przychodzący jako ES6. -
Wyłącz błędy składni javascript w Visual Studio w następujący sposób:
- W Visual Studio przejdź do Narzędzia > Opcje > edytor tekstu > JavaScript > IntelliSense
- odznacz pole Pokaż błędy składni i OK out
Ważne: uruchom ponownie Visual Studio. Twoje
.jsx
pliki z kodem ES6 nie powinny już mieć czerwonych zawijasów na Twoim kodzie ES6.
Uwagi:
- Nie wiem, czy zmiana opisana w rozwiązaniu 2 do pliku
server.js
wpłynie na kod spoza ES6. Więc wdrożyć na własne ryzyko. - poza tym, to całkiem możliwe / prawdopodobne, że Twoja zmiana może zostać nadpisana późniejszą aktualizacją do Visual Studio.
- byłoby fajnie/fajnie zastąpić użycie
react-tools
wewnątrzreact-server
Babel CLI. UPDATE: Thanks to @ NickDewitt, seems he was able to make this work: https://stackoverflow.com/a/36321109/9324
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:59
W VS2015 Update-3 i ntvs 1.2 zainstalowane, po prostu ustawienie edytora TypeScript jako domyślnego edytora dla rozszerzenia pliku jsx załatwiło mi sprawę.
1) Otwórz Narzędzia > Opcje > Edytor Tekstu > Rozszerzenie Pliku.
2) wpisz jsxW rozszerzeniu, Wybierz edytor maszynopisu jako edytor i kliknij Zastosuj.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-02 07:32:53
EDIT : Visuals studio 15 zmienia nazwę na Visual Studio 2017: możesz pobrać RC tutaj: https://www.visualstudio.com/vs/visual-studio-2017-rc/
Przyszłe Rozwiązanie:
Visual Studio " 15 " Preview 2 Obsługa JSX en React po wyjęciu z pudełka. Możesz włączyć tę samą (Salsa) Javascript Service library jak VS Code.
Tutaj wydanie Przypisy: https://www.visualstudio.com/en-us/news/releasenotes/vs15/vs15-relnotes
Salsa: https://github.com/Microsoft/TypeScript/wiki/Using-the-Salsa-Preview-in-Visual-Studio-15-Preview
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-20 19:54:10
Rozwiązanie '3':
Dzięki spostrzeżeniom Adama w jego odpowiedzi, mam to działa z babel {[22] } i to wtyczki / presety. Warto najpierw przeczytać jego odpowiedź, jeśli próbujesz tego.
Zanim przejdziesz dalej, musisz zainstalować nodeJs i npm i wykonać kopię zapasową plików przed ich modyfikacją.
używam react, es2015 wtyczki z stage1 presety tutaj, ale możesz używać dowolnych wtyczek
Powershell do
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\External\react-server
-
Zainstaluj następujące pakiety:
npm install babel-core --save-dev npm install babel-preset-es2015 --save-dev npm install babel-preset-react --save-dev npm install babel-preset-stage-1 --save-dev
-
Dodaj zależności do
server.js
poniżejchildProcess
var childProcess = require('child_process'); //already there var babel = require('babel-core'); var es2015 = require('babel-preset-es2015'); var react = require('babel-preset-react'); var stage1 = require('babel-preset-stage-1');
-
Zastąp
try{}catch{}
sekcjęreq.on('end'
przypisania w funkcjitransformJsxFromPost
:try { var transformed = babel.transform( code, { sourceMaps: true, presets: [ es2015, react, stage1 ] } ); result = { elementMappings: [] } //I found it least buggy when returning an empty list of elementMappings //but i will leave the code i was using to try and dupe it, or //recreate the elementMappings from react-tools // // result = { // elementMappings: [{ // 'start': 1, // 'end': transformed.code.length, // 'generatedCode': transformed.code // }], // map: transformed.map, // code: transformed.code // } } catch (e) { //the error that react-tools was returning was slightly different, so //map the babel error back to the react-tools error that VS 2015 expects result = { column: e.loc.column, description: e.errorMessage, errorMessage: e.message + ".. :-(", index: e.pos, lineNumber: e.loc.line }; }
Uruchom ponownie visual studio, zamknij i ponownie otwórz dowolny .pliki jsx i ciesz się podświetleniem składni babel :-)
Uwagi
Daj parserowi szansę na rozpoczęcie po uruchomieniu, visual studio wykona następujące czynności po załadowaniu do .plik jsx pierwszy raz:
- Utwórz folder w
%localappdata%\Temp\
zstderr.txt
, gdzie znajdziesz dziennik wszelkich błędów istdout.txt
, który powie ci, na czym działa serwer, a także zapisze inne informacje. - uruchom serwer nodeJs, działający na
localhost:{port}
, który akceptuje JSX jako POST na/transformJsxFromPost
i zwraca numer linii i numer kolumny pierwszego błędu, który napotka jako obiekt json do visual studio
W Visual Studio przejdź do Narzędzia > Opcje > edytor tekstu > JavaScript > IntelliSense, a następnie odznacz pole Pokaż błędy składni i ok.
Z wyłączonym javascript intellisense, oba react-server w pakiecie z vs i babel, ponieważ zastępuję go tutaj zwracają tylko pierwszy napotkany błąd, więc nie powinieneś oczekiwać, że wszystkie błędy będą podświetlane w całym pliku, ale pojawią się podczas wpisywania, jeśli zachowasz wolny od błędów kod.
Wydaje mi się, że teraz pozostaje tylko uzyskać elementMappings
nad prawidłowo-rozwiązanie 4 może? :-)
Próbując to zbadać, zdałem sobie sprawę z prostego sposobu pracy z plikami jsx we wszystkich wersjach Visual Studio. Nie jest idealny, ale działa na mnie.
Pobierz najnowszy kod Visual Studio [ https://code.visualstudio.com/updates ] następnie kliknij prawym przyciskiem myszy plik jsx w dowolnej wersji Visual Studio i wybierz 'Otwórz za pomocą...'. Wybierz "Dodaj" i przejrzyj ostatnio pobrany kod programu Visual Studio i ustaw go jako domyślny.
Hope that helps people martwiąc się o konieczność aktualizacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 00:51:31
Jest wymieniony w komentarzach powyżej przez @TheQuickBrownFox, ale domyślnie ukryty( potrzebny do rozszerzenia wszystkich, aby go zobaczyć), więc podsumowując, co zrobiłem, aby rozwiązać problem w najnowszej aktualizacji społeczności Visual Studio 2015 3: {]}
100% z roztwór 1 Adam Weber: https://stackoverflow.com/a/34110461/1633913 (ustawienie poziomu języka JavaScript W ReSharper na ECMAScript 2016 i Zaznaczenie włącz JSX ... w tym samym oknie + wyłączenie Pokaż Błędy składniowe w opcjach IntelliSense vs JavaScript)
Rozwiązanie 2 Adam Weber: https://stackoverflow.com/a/34110461/1633913 , ale nieco zmodyfikowany; plik docelowy, w którym należy zastąpić:
To: var transformed = reactTools.transformWithDetails(code, { elementMap: true });
Z tym: var transformed = reactTools.transformWithDetails(code, { elementMap: true, es6module: "--es6module", harmony: "--harmony" });
Rzeczywiście jest tutaj: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Web\External\vs-task-server\react-commands.js
Restart VS i gotowe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:33:17