Přizpůsobení chování editoru pomocí konfigurace jazyka
Vlastní syntaxi specifickou pro jazyk můžete implementovat v editoru sady Visual Studio pomocí konfigurace jazyka a povolit operace syntaxe specifické pro jazyk. Ve srovnání s používáním jazykového serveru může použití konfigurace jazyka zlepšit výkon, protože všechny jeho operace jsou místní.
Co je konfigurace jazyka
Visual Studio nabízí inteligentní možnosti úprav pro různé programovací jazyky prostřednictvím jazykových rozšíření. Konfigurace jazyka doplňuje servery používající protokol LSP (Language Server Protocol) a poskytuje deklarativní data, která editoru sady Visual Studio umožňují provádět formátování, zabarvení a dokončování rozhodnutí bez zpoždění provádění asynchronního dotazu na server LSP. Funkce deklarativního jazyka jsou definovány v konfiguračních souborech. Například rozšíření HTML, CSS a typescript-basic, která jsou součástí sady Visual Studio, nabízejí podmnožinu následujících deklarativních jazykových funkcí:
- Zvýrazňování syntaxe
- Dokončení fragmentu kódu
- Párování závorek
- Automatické vytváření závorek
- Přepínání komentářů
- Automatické zápisy
Visual Studio poskytuje možnosti rozšíření pro definování konfigurace jazyka pro libovolný programovací jazyk. Konfigurační soubor jazyka řídí základní funkce úprav, jako je přepínání komentářů a porovnávání závorek a okolí.
Použití konfigurace jazyka pomáhá s:
- Synchronní práce s psaním uživatelů
- Jednoduchost: Krátké soubory JSON s regulárními výrazy se snadněji spravují než složitý algoritmus.
- Přenositelnost: Vyžadování žádných nebo minimálních změn mezi editorem Visual Studio Code a sadou Visual Studio
Konfigurační soubory jazyka také poskytují snadný způsob, jak rozšířit Sadu Visual Studio tak, aby podporovala některé základní funkce refaktoringu prostřednictvím snadno čitelného souboru JSON.
Přidání podpory konfigurace jazyka do rozšíření sady Visual Studio
Přidání podpory konfigurace jazyka do rozšíření sady Visual Studio má tři části:
- Vytvoření projektu VSIX
- Vytvoření souboru konfigurace jazyka
- Přidání gramatického souboru
- Aktualizace souboru pkgdef
Můžete prozkoumat funkční ukázku v ukázce konfigurace jazyka.
Vytvoření projektu VSIX
Pokud chcete vytvořit rozšíření jazykové služby pomocí konfigurace jazyka, nejprve se ujistěte, že máte nainstalovanou úlohu vývoje rozšíření sady Visual Studio pro vaši instanci sady VS.
Dále vytvořte nový projekt VSIX tak, že přejdete na Soubor>nový projekt, vyhledáte "vsix" a vyhledejte projekt VSIX:
Vytvoření konfiguračního souboru jazyka
Při vytváření vlastního konfiguračního souboru jazyka můžete zvolit, které aspekty se mají připojit do souboru JSON. Můžete například podporovat přepínání komentářů, automatické zakládání složených závorek nebo libovolnou kombinaci dostupných funkcí popsaných v této části.
Pokud chcete do rozšíření přidat podporu, nejprve vytvoříte konfigurační soubor jazyka. Název souboru musí být standardní: pomocí pomlček oddělte slova v názvu souboru a ujistěte se, že končí language-configuration.json
.
Následující kód ukazuje ukázkový konfigurační soubor jazyka.
{
"comments": {
"lineComment": "***",
"blockComment": ["{*", "*}"]
},
"brackets": [
["@", "@"],
["#", "#"],
["$", "$"],
["(", ")"]
],
"autoClosingPairs": [
{ "open": "{", "close": "}" },
{ "open": "@", "close": "@" },
{ "open": "#", "close": "#" },
{ "open": "$", "close": "$" },
{ "open": "(", "close": ")" },
{ "open": "'", "close": "'", "notIn": ["string", "comment"] },
{ "open": "\"", "close": "\"", "notIn": ["string"] },
],
"autoCloseBefore": ";:.,=}])>` \n\t",
"surroundingPairs": [
["@", "@"],
["#", "#"],
["$", "$"],
["[", "]"],
["(", ")"],
["'", "'"],
["\"", "\""],
["`", "`"]
],
"wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)",
"indentationRules": {
"increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$",
"decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
}
}
Nastavení konfigurace
Následující části popisují nastavení, která jsou k dispozici v konfiguračním souboru jazyka.
Přepínání komentářů
Konfigurační soubory jazyka nabízejí dva příkazy pro přepínání komentářů. Přepnout komentář řádku a přepnout blokový komentář. Můžete určit comments.blockComment
, comments.lineComment
jak má Visual Studio okomentovat řádky nebo bloky.
{
"comments": {
"lineComment": "//",
"blockComment": ["/*", "*/"]
}
}
Toto nastavení ovlivňuje chování textového editoru sady Visual Studio při stisknutí kláves Ctrl+K, Ctrl+C.
Definice závorek
Když přesunete kurzor na závorku definovanou tady, Visual Studio zvýrazní tuto závorku společně s odpovídající dvojicí.
{
"brackets": [["{", "}"], ["[", "]"], ["(", ")"]]
}
Relevantní nastavení v dialogovém okně Možnosti nástrojů sady Visual Studio, v Textovém editoru, Obecné, Zobrazení, je zaškrtávací políčko Povolit zabarvení páru závorek.>
Automatické seznamy
Když zadáte '
, Visual Studio vytvoří dvojici jednoduchých uvozovek a umístí kurzor doprostřed: '|'
. Tato část definuje tyto páry.
{
"autoClosingPairs": [
{ "open": "{", "close": "}" },
{ "open": "[", "close": "]" },
{ "open": "(", "close": ")" },
{ "open": "'", "close": "'", "notIn": ["string", "comment"] },
{ "open": "\"", "close": "\"", "notIn": ["string"] },
{ "open": "`", "close": "`", "notIn": ["string", "comment"] },
{ "open": "/**", "close": " */", "notIn": ["string"] }
]
}
Klíč notIn
tuto funkci zakáže v určitých oblastech kódu. Například při psaní následujícího kódu:
// ES6's Template String
`ES6's Template String`;
Jednoduchá uvozovka není automatická.
Páry, které nevyžadují notIn
vlastnost, můžou také použít jednodušší syntaxi:
{
"autoClosingPairs": [ ["{", "}"], ["[", "]"] ]
}
Automatické seznamy před
Ve výchozím nastavení visual Studio automaticky zakřesí jenom páry, pokud je po kurzoru prázdné znaky. Takže když zadáte {
následující kód JSX, nebudete mít automatické zakódy:
const Component = () =>
<div className={>
^ Does not get autoclosed by default
</div>
Tato definice však toto chování přepíše:
{
"autoCloseBefore": ";:.,=}])>` \n\t"
}
Když teď zadáte {
přímo před >
, Visual Studio ho automaticky zakřesí .}
Automatické zajištění
Když vyberete oblast v sadě Visual Studio a zadáte levou závorku, Visual Studio uzavře vybraný obsah do dvojice závorek. Tato funkce se nazývá Automatické zajištění a tady můžete definovat páry automatického zajištění pro konkrétní jazyk:
{
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["'", "'"],
["\"", "\""],
["`", "`"]
]
}
Relevantní nastavení v možnostech nástrojů sady Visual Studio je v textovém editoru, obecné, zobrazení zaškrtávacího políčka Automaticky obklopovat výběry při psaní uvozovek nebo hranatých závorek.>
Vzor wordu
wordPattern
definuje, co se považuje za slovo v programovacím jazyce. Funkce návrhu kódu používají toto nastavení k určení hranic slov, pokud wordPattern
jsou nastavené.
{
"wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)"
}
Pravidla odsazení
indentationRules
definuje, jak má editor upravit odsazení aktuálního řádku nebo dalšího řádku při psaní, vkládání a přesouvání řádků nebo při formátování textu pomocí Ctrl+K, Ctrl+D (Formát dokumentu) a Ctrl+K, Ctrl+F (Formát výběru).
{
"indentationRules": {
"increaseIndentPattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$",
"decreaseIndentPattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$"
}
}
if (true) {
Například odpovídá increaseIndentPattern
, pak pokud po otevřené závorce {
stisknete Enter , editor se automaticky odsadí a váš kód skončí takto:
if (true) {
console.log();
Kromě increaseIndentPattern
a decreaseIndentPatter
, existují dvě další pravidla odsazení:
indentNextLinePattern
- Pokud řádek odpovídá tomuto vzoru, měl by být odsazený pouze další řádek za ním.unIndentedLinePattern
– Pokud řádek odpovídá tomuto vzoru, jeho odsazení by se nemělo měnit a nemělo by se vyhodnocovat podle ostatních pravidel.
Pokud pro programovací jazyk neexistuje žádná sada pravidel odsazení, editor se odsadí, když čára končí otevřenou závorkou a jednondenty při zadávání uzavírací závorky. Hranatá závorka zde je definována .brackets
Stisknutím klávesy Enter
onEnterRules
definuje seznam pravidel, která se mají vyhodnotit při stisknutí klávesy Enter v editoru.
{
"onEnterRules": [{
"beforeText": "^\\s*(?:def|class|for|if|elif|else|while|try|with|finally|except|async).*?:\\s*$",
"action": { "indent": "indent" }
}]
}
Při stisknutí klávesy Enter se text před, za nebo jedním řádkem nad kurzorem zkontroluje následující vlastnosti:
beforeText
(povinné). Regulární výraz, který odpovídá textu před kurzorem (omezený na aktuální řádek).afterText
. Regulární výraz, který odpovídá textu za kurzorem (omezený na aktuální řádek).previousLineText
. Regulární výraz, který odpovídá textu o jeden řádek nad kurzorem.
Pokud se shodují všechny zadané vlastnosti, pravidlo se považuje za odpovídající a nevyhodnotí se.onEnterRules
Může onEnterRule
zadat následující akce:
indent
(povinné). Jeden znone, indent, outdent, indentOutdent
.none
znamená, že nový řádek dědí odsazení aktuálního řádku.indent
znamená, že nový řádek je odsazený vzhledem k aktuálnímu řádku.outdent
znamená, že nový řádek je nesrovnaný vzhledem k aktuálnímu řádku.indentOutdent
znamená, že se vloží dva nové řádky, jeden odsazený a druhý jeden je jedno.
appendText
. Řetězec, který se připojí za nový řádek a za odsazení.removeText
. Počet znaků, které se mají odebrat z odsazení nového řádku
Nastavení vlastností
V projektu rozšíření se ujistěte, že soubor language-configuration.json
má následující nastavení vlastnosti:
Build Action = Content
Include in VSIX = True
Copy to output = Copy always
(volitelné) Přidání gramatického souboru
Kromě toho můžete přidat gramatický soubor TextMate, který zajistí barvu syntaxe pro jazyk. Gramatiky TextMate jsou strukturovaná kolekce regulárních výrazů a zapisují se jako soubory plist (XML) nebo JSON. Viz Gramatiky jazyka. Pokud nezadáte gramatický soubor specifický pro jazyk, použije se integrované výchozí nastavení.
Pokud chcete přidat vlastní gramatické nebo motivové soubory TextMate, postupujte takto:
Ve svém rozšíření vytvořte složku s názvem Grammars (nebo může být jakýkoli název, který zvolíte).
Do složky Grammars (Gramatika) zahrňte všechny soubory *.tmlanguage, *.plist, *.tmtheme nebo *.json soubory, které chcete použít pro vlastní zabarvení.
Tip
Soubor .tmtheme definuje, jak se obory mapují na klasifikace sady Visual Studio (pojmenované barevné klíče). Pokyny najdete v globálním souboru .tmtheme v adresáři %ProgramFiles(x86)%\Microsoft Visual Studio\<version>\<SKU>\Common7\IDE\CommonExtensions\Microsoft\TextMate\Starterkit\Themesg .
Vytvoření souboru pkgdef
Dále vytvořte .pkgdef
soubor. Soubor .pkgdef
obsahuje všechny informace o registraci, které by jinak byly přidány do systémového registru. Další informace o souborech naleznete v pkgdef
tématu Registrace balíčku VSPackages a Co je pkgdef soubor? A proč? pkgdef
V souboru byste měli mít cestu k language-configuration.json
souboru a cestu pro gramatiku jazyka. Jazykové služby, jako je LSP, si vyžádat typ obsahu editoru a získat je prostřednictvím konfigurace jazyka. Tyto informace poskytují inteligentní funkce specifické pro jazyk uvnitř serveru, který může komunikovat s vývojářskými nástroji. Pokud služba jazyka neexistuje, modul Konfigurace jazyka se vrátí do gramatiky TextMate. Soubor .pkgdef
by měl vypadat takto:
[$RootKey$\TextMate\Repositories]
"AspNetCoreRazor="$PackageFolder$\Grammars
// Defines where the language configuration file for a given
// grammar name is (value of the ScopeName tag in the tmlanguage file).
[$RootKey$\TextMate\LanguageConfiguration\GrammarMapping]
"text.aspnetcorerazor"="$PackageFolder$\language-configuration.json"
// Defines where the language configuration file for a given
// language name is (partial value of the content type name).
[$RootKey$\TextMate\LanguageConfiguration\ContentTypeMapping]
"RazorLSP"="$PackageFolder$\language-configuration.json"
[$RootKey$\TextMate\LanguageConfiguration\GrammarMapping]
"text.html.basic"="$PackageFolder$\html-language-configuration.json"
"source.js"="$PackageFolder$\javascript-language-configuration.json"
"source.css"="$PackageFolder$\css-language-configuration.json"
"source.cs"="$PackageFolder$\csharp-language-configuration.json
Ujistěte se, že jsou vlastnosti pkgdef
souboru nastaveny takto:
Build Action = Content
Include in VSIX = True
Copy to output = Copy always
Aby byly informace o konfiguraci jazyka přístupné pro Visual Studio, zahrňte language-configuration
soubor do balíčku VSIX. Zahrnutí tohoto souboru znamená, že se dodává s příponou sady Visual Studio. Soubor umožňuje sadě Visual Studio vědět, že je k dispozici konfigurace jazyka. Pokud chcete soubor přidat, upravte vsixmanifest
soubor PKGDEF def, například:
<Asset Type="Microsoft.VisualStudio.VsPackage" Path="Test.pkgdef"/>