2015-06-06 14 views
18

में कस्टम भाषा बनाएं विजुअल स्टूडियो कोड में समर्थित भाषाओं/व्याकरणों का विस्तार करने का कोई तरीका है? मैं एक कस्टम भाषा वाक्यविन्यास जोड़ना चाहता हूं, लेकिन मुझे भाषा सेवाओं को प्रदान करने के तरीके के बारे में कोई जानकारी नहीं मिली है।विजुअल स्टूडियो कोड

क्या कोई भी किसी भी संदर्भ या मौजूदा भाषा कार्यान्वयन के उदाहरणों को इंगित कर सकता है?

+0

के लिए चेक GitHub पर मैड्स Kristensen की वेब अनिवार्य भंडार पथ को बदलने की जरूरत होगी। –

+0

यह वीएस के लिए है, लेकिन वीएस कोड के लिए नहीं। –

+0

क्षमा करें, मुझे आपके प्रश्न का वह हिस्सा याद आया। ~ AppData \ Local \ Code \ app-0.1.0 \ संसाधन \ app \ plugins निर्देशिका में भाषा प्लगइन्स हैं, आप उनका उपयोग कर सकते हैं। –

उत्तर

0

यह not possible अभी है, लेकिन coming soon है।

+0

हालांकि, जैसा कि एमरे सेंट्रुक ने सुझाव दिया था, आप कुछ वीएस कोड स्रोत फ़ाइलों के साथ झुकाव करने का प्रयास कर सकते हैं। – zlumer

+11

यह उत्तर पुराना है और अब अवहेलना किया जाना चाहिए। 0.9.0 के रूप में यह अब संभव है। – wheredidthatnamecomefrom

2

रिवर्स इंजीनियरिंग का उपयोग करके आप वीएससीओडी में एक नई भाषा जोड़ सकते हैं। आप एक जावास्क्रिप्ट प्लगइन के रूप में टाइपस्क्रिप्ट को कैसे कार्यान्वित किया जाता है और यह पाइप के माध्यम से node.exe के साथ कैसे संचार करता है, इस पर एक नज़र डाल सकते हैं। लेकिन यह एक कठिन बात है क्योंकि यह सब कुछ दस्तावेज के बिना आ रहा है मैं यहां वास्तव में एक छोटा सा दस्तावेज प्रदान करूंगा:

आप प्लगइन्स फ़ोल्डर C:\Users\USER\AppData\Local\Code\app-0.3.0\resources\app\plugins में एक नई प्लगइन परिभाषित कर सकते हैं।

टाइपस्क्रिप्ट प्लगइन फ़ोल्डर की प्रतिलिपि बनाएँ और अपनी नई भाषा में सभी फ़ाइलों में उल्लिखित फ़ाइल एक्सटेंशन और भाषा नामों का नाम बदलें, ताकि आपकी नई प्लगइन का उपयोग किया जा सके जब एक .mylang फ़ाइल खोली जाती है।

typescriptServiceClient.js में आप देखते हैं कि एक बच्चे की प्रक्रिया काटा जा रहा है और इसका stdoutnew WireProtocol.Reader के साथ जोड़ा गया है। अपने mylanguage.exe को बांधें (आपको संभवतः उस exe को अपने आप लिखने की आवश्यकता होगी)। वीएससीओडी पूछता है कि अधिक भाषा विशिष्ट जानकारी प्राप्त करने के लिए बाइनरी।

typescriptMain.js में आपको भाषा के लिए सुविधा पंजीकरण मिल गया है। पर monaco.Modes.DeclarationSupport.register को छोड़कर प्रत्येक कॉल को हटाएं।

अब वीएससीओडी में एक निर्देशिका खोलें जिसमें .mylang फ़ाइलें हैं और उनमें से एक को CTRL+P + FileName के माध्यम से खोलें। पहचानकर्ता पर राइट क्लिक करें और Go to Definition चुनें। VSCode अब अपनी exe को stdin के माध्यम से इस तरह के अनुरोध भेजता है

{"seq":1,"type":"request","command":"definition","arguments":{"file":"d:/Projects/MyProj/Source/MyFile.mylang","line":45,"offset":9}} 

VSCode उम्मीद इस तरह एक जवाब:

Content-Length: 251 
[LINE BREAK] 
{ "seq" : 1, "type" : "response", "command" : "definition", "request_seq" : 1, "success" : true, "body" : [{ "file" : "d:/Projects/MyProj/Source/MyOtherFile.mylang", "start" : { "line" : 125, "offset" : 3 }, "end" : { "line" : 145, "offset" : 11} }] } 

सब कुछ काम करता है VSCode MyOtherFile.mylang खोलने के लिए और में 124 लाइन के लिए कर्सर सेट हो जाएगा स्तंभ 3.

अपनी खुद की ;-) पर यह प्रयास करें

37

यह नया संस्करण 0.9.0 के साथ संभव है। कस्टम भाषा जोड़ने के तरीके पर एक आधिकारिक दस्तावेज है: https://github.com/Microsoft/vscode-docs/blob/0.9.0/release-notes/latest.md

आपको उस भाषा के लिए .tmLanguage फ़ाइल की आवश्यकता है, जिसे आप जोड़ना चाहते हैं। आप मौजूदा फाइलें पा सकते हैं उदा। गिटहब पर या आप अपनी खुद की भाषा फाइल को परिभाषित कर सकते हैं। एक बनाने के बारे में एक विचार प्राप्त करने के लिए यहां देखें: http://manual.macromates.com/en/language_grammars

.tmLanguage फ़ाइल ढूंढने के बाद आपके पास एक एक्सटेंशन बनाने के दो तरीके हैं।

विकल्प 1: एक Yeoman जनरेटर का उपयोग

  • नोड को स्थापित करें।js (यदि आप पहले नहीं किया है)
  • स्थापित यो (यदि आप पहले नहीं किया है) npm install -g yo
  • को क्रियान्वित करते हुए कोड के लिए यो जनरेटर स्थापित करें: npm install -g generator-code
  • भागो yo code और चुनें New language support
  • का पालन करें निर्देश (.tmLangauge फ़ाइल को परिभाषित करें, प्लगइन नाम, फ़ाइल एक्सटेंशन इत्यादि को परिभाषित करें)
  • जनरेटर आपके वर्तमान कार्य निर्देशिका में प्लगइन के नाम के साथ आपके एक्सटेंशन के लिए निर्देशिका बनाता है।

विकल्प 2: पर डायरेक्टरी बनाएँ अपनी खुद की

  • अपने प्लगइन (केवल छोटे अक्षरों) के नाम के साथ एक निर्देशिका बनाएँ। मान लें कि हम इसे mylang कहते हैं।
  • अंदर की यह
  • इस

    { 
        "name": "mylang", 
        "version": "0.0.1", 
        "engines": { 
         "vscode": ">=0.9.0-pre.1" 
        }, 
        "publisher": "me", 
        "contributes": { 
         "languages": [{ 
          "id": "mylang", 
          "aliases": ["MyLang", "mylang"], 
          "extensions": [".mylang",".myl"] 
         }], 
         "grammars": [{ 
          "language": "mylang", 
          "scopeName": "source.mylang", 
          "path": "./syntaxes/mylang.tmLanguage" 
         }] 
        } 
    } 
    

की तरह सामग्री के साथ विस्तार फ़ोल्डर की जड़ के अंदर एक फ़ाइल package.json बनाएँ सबफ़ोल्डर syntaxes जोड़ें और .tmlanguage फ़ाइल अंत में करने के लिए अपने एक्सटेंशन जोड़ने विजुअल स्टूडियो कोड

एक्सटेंशन फ़ोल्डर को एक्सटेंशन निर्देशिका में कॉपी करें। यह वह जगह है:

  • पर पर Windows%USERPROFILE%\.vscode\extensions

  • मैक/लिनक्स$HOME/.vscode/extensions

पुनरारंभ कोड। अब जब भी आप निर्दिष्ट फ़ाइल एक्सटेंशन के साथ फ़ाइल खोलते हैं तो आपका एक्सटेंशन स्वचालित रूप से चला जाएगा। आप नीचे दाएं कोने में प्रयुक्त प्लगइन का नाम देख सकते हैं। आप एक्सटेंशन के नाम पर क्लिक करके इसे बदल सकते हैं। यदि आपका एक्सटेंशन केवल एक विशिष्ट फ़ाइल एक्सटेंशन के लिए पंजीकृत नहीं है तो कोड गलत चुन सकता है।

+1

मुझे एक भाषा मिल रही है FileName त्रुटि परिभाषित नहीं है। कभी देखा है कि एक? –

+0

यह ध्यान दिया जा सकता है कि 'स्कोपनाम' को '.tmLanguage' फ़ाइल में जैसा होना चाहिए – gr4nt3d

2

.tmLanguage फ़ाइल का उपयोग करके, विकिस उत्तर का विस्तार करने के लिए वैकल्पिक है। नियमित .json का उपयोग करना पूरी तरह से मान्य है और मेरी राय में बेहतर पठनीय विकल्प है।

एक उदाहरण के लिए अंदर GitHub VSCode_SQF: sqf.json

देख package.json आप केवल से ./syntaxes/mylang.tmLanguage./syntaxes/mylang.json

संबंधित मुद्दे