เซิร์ฟเวอร์ภาษา VSCode - Node.js
พื้นที่เก็บข้อมูลนี้มีรหัสสำหรับโมดูล npm ต่อไปนี้:
- vscode- languageclient : โมดูล npm เพื่อพูดคุยกับเซิร์ฟเวอร์ภาษา VSCode จากส่วนขยาย VSCode:
- vscode- languageserver : โมดูล npm เพื่อใช้เซิร์ฟเวอร์ภาษา VSCode โดยใช้ Node.js เป็นรันไทม์:
- vscode- languageserver-textdocument : โมดูล npm เพื่อใช้เอกสารข้อความที่ใช้งานได้ในเซิร์ฟเวอร์ LSP โดยใช้ Node.js เป็นรันไทม์:
- vscode- languageserver-protocol : คำจำกัดความโปรโตคอลเซิร์ฟเวอร์ภาษาจริงใน TypeScript:
- vscode- languageserver-types : ประเภทข้อมูลที่ใช้โดยไคลเอนต์เซิร์ฟเวอร์ภาษาและเซิร์ฟเวอร์:
- vscode-jsonrpc : โปรโตคอลข้อความพื้นฐานในการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์:
โมดูล npm ทั้งหมดสร้างขึ้นโดยใช้ Azure Pipeline เพียงอันเดียว สถานะของมันคือ:
คลิกที่นี่เพื่อดูเอกสารโดยละเอียดเกี่ยวกับวิธีใช้โมดูล npm เหล่านี้เพื่อใช้งานเซิร์ฟเวอร์ภาษาสำหรับ VSCode
มีส่วนร่วม
หลังจากการโคลนพื้นที่เก็บข้อมูลแล้ว ให้รัน npm install
เพื่อติดตั้งการขึ้นต่อกัน และ npm run symlink
เพื่อชี้แพ็กเกจในที่เก็บนี้ให้กันและกัน
ประวัติศาสตร์
ถัดไป (ไคลเอนต์ 10.0.0-ถัดไป* และเซิร์ฟเวอร์ 10.0.0-ถัดไป*)
- อัปเกรดเป็นไลบรารี คอมไพเลอร์ และกฎการส่งออก package.json ที่ใหม่กว่า:
- คอมไพเลอร์อัปเกรดเป็น
5.5.x
- ตอนนี้ Libs ขึ้นอยู่กับ NodeJS
20.9.0
และ es2022
ดูเพิ่มเติมที่การแมปเป้าหมายโหนดของ TypeScript -
vscode-jsonrpc
, vscode-languageserver-protocol
, vscode-languageclient
และ vscode-languageserver
ตอนนี้ใช้คุณสมบัติ exports
แทนที่จะมีคุณสมบัติ main
และ typings
สิ่งนี้อาจต้องมีการยอมรับในไฟล์ tsconfig.json รอบ module
และ moduleResolution
ปัจจุบันไลบรารี LSP ใช้ node16
สำหรับทั้งสองค่า
- เพิ่ม CodeActionKind.RefactorMove ที่เสนอ
- การสนับสนุนตัวอย่างในการแก้ไขพื้นที่ทำงาน
- สนับสนุนการควบคุมความเท่าเทียมของคำขอจัดส่งและการแจ้งเตือน นี่เป็นการเปลี่ยนแปลงครั้งใหญ่เนื่องจากช่วยให้ตัวจัดการการแจ้งเตือนสามารถคืนสัญญาในการควบคุมสิ่งนี้ได้
- ทำให้การใช้งานเบราว์เซอร์ไคลเอนต์สอดคล้องกับการใช้งานโหนดในแง่ของข้อโต้แย้ง นี่เป็นการเปลี่ยนแปลงครั้งใหญ่เนื่องจากมีการเรียงลำดับการประกาศพารามิเตอร์ใหม่
- เพิ่ม
CancellationToken
ให้กับมิดเดิลแวร์เอกสารการแสดงเพื่อให้สอดคล้องกับมิดเดิลแวร์อื่นๆ นี่เป็นการเปลี่ยนแปลงครั้งใหญ่เนื่องจากมีการเพิ่มพารามิเตอร์ที่จำเป็น
โปรโตคอล 3.17.5, ไคลเอนต์ 9.0.1 และเซิร์ฟเวอร์ 9.0.1
3.17.4 โปรโตคอล 8.2.0 JSON-RPC 9.0.0 ไคลเอ็นต์ และ 9.0.0 เซิร์ฟเวอร์
- เพิ่มคำขอกรอกแบบอินไลน์ที่เสนอ
- เพิ่มคำขอช่วงการจัดรูปแบบที่เสนอ
- เพิ่มคำขอรีเฟรชที่เสนอสำหรับช่วงการพับ สิ่งนี้เปลี่ยนรูปร่างของคุณสมบัติช่วงการพับ เนื่องจากเราจำเป็นต้องเปิดเผยตัวปล่อยเหตุการณ์ การเปลี่ยนแปลงกำลังจะพัง เพื่อไปที่ผู้ให้บริการคุณต้องทำตอนนี้
client . getFeature ( lsclient . FoldingRangeRequest . method ) . getProvider ( document ) ?. provider ;
- แก้ไขข้อบกพร่องต่างๆ
โปรโตคอล 3.17.4-next.0, 8.2.0-next.0 JSON-RPC, 8.2.0-next.0 ไคลเอ็นต์ และ 8.2.0-next.0 เซิร์ฟเวอร์
- การสนับสนุนมิดเดิลแวร์สำหรับการแจ้งเตือนและคำขอทั่วไปตลอดจนความสามารถในการลงทะเบียนและยกเลิกการลงทะเบียน
- แก้ไขข้อบกพร่องต่างๆ
3.17.3 โปรโตคอล, 8.1.0 JSON-RPC, 8.1.0 ไคลเอนต์ และ 8.1.0 เซิร์ฟเวอร์
- รองรับตัวจัดการข้อความแบบกำหนดเอง
- แก้ไขข้อบกพร่องต่างๆ สิ่งสำคัญคือการแก้ไขปัญหาเกี่ยวกับคำขอสั่งซื้อปัญหาเกี่ยวกับการซิงค์เอกสารแบบเต็ม
3.17.2 โปรโตคอล, 8.0.2 JSON-RPC, 8.0.2 ไคลเอนต์ และ 8.0.2 เซิร์ฟเวอร์
- ทำให้ไคลเอนต์แข็งแกร่งมากขึ้นต่อการรีสตาร์ทที่ไม่ต้องการ
- เพิ่มเมธอด LanguageClient#dispose เพื่อกำจัดไคลเอ็นต์อย่างสมบูรณ์
- แก้ไขข้อบกพร่องต่างๆ
โปรโตคอล 3.17.0, 8.0.0 JSON-RPC, ไคลเอ็นต์ 8.0.0 และเซิร์ฟเวอร์ 8.0.0
การเปลี่ยนแปลงเฉพาะของห้องสมุดคือ:
- การล้างข้อมูลวิธี
start
และ stop
ไคลเอ็นต์ ตอนนี้ทั้งสองวิธีส่งคืนสัญญาเนื่องจากวิธีการเหล่านี้ไม่ตรงกัน นี่คือการเปลี่ยนแปลงครั้งใหญ่ตั้งแต่เริ่มส่งคืนแบบใช้แล้วทิ้งมาก่อน ส่วนขยายควรใช้ฟังก์ชันปิดใช้งานในไฟล์หลักของส่วนขยายและส่งคืนสัญญา stop
จากการโทรที่ปิดใช้งานอย่างถูกต้อง ผลที่ตามมาคือ onReady()
ถูกลบออกเนื่องจากส่วนขยายสามารถรอการเรียก start()
ได้ทันที โค๊ดเก่าๆแบบนี้
const client : LanguageClient = ... ;
client . start ( ) ;
await client . onReady ( ) ;
ควรเป็น:
const client : LanguageClient = ... ;
await client . start ( ) ;
- การแจ้งเตือนและการลงทะเบียนตัวจัดการคำขอสามารถเกิดขึ้นได้ก่อนที่ไคลเอนต์จะเริ่มทำงาน เพื่อให้แน่ใจว่าไม่มีข้อความจากเซิร์ฟเวอร์พลาด
- หากส่วนขยายส่งการแจ้งเตือนหรือคำขอก่อนที่ไคลเอนต์จะเริ่มต้น ไคลเอนต์จะเริ่มทำงานโดยอัตโนมัติ
- ตอนนี้วิธี
sendNotification
ทั้งหมดคืนสัญญาแล้ว การส่งคืนสัญญาเป็นสิ่งจำเป็นเนื่องจากการเขียนข้อความจริงไปยังการขนส่งพื้นฐานนั้นไม่พร้อมกัน และตัวอย่างไคลเอนต์ไม่สามารถระบุได้ว่ามีการส่งการแจ้งเตือนไปยังการขนส่งหรือไม่ นี่เป็นการเปลี่ยนแปลงครั้งใหญ่ในแง่ที่ว่าอาจส่งผลให้เกิดสัญญาลอยตัวและอาจถูกทำเครื่องหมายโดย linter - ขณะนี้การลงทะเบียนตัวจัดการทั้งหมดส่งคืนแบบใช้แล้วทิ้งเพื่อให้สามารถยกเลิกการลงทะเบียนตัวจัดการได้
- ลักษณะการทำงานของ
handleFailedRequest
มีการเปลี่ยนแปลง แทนที่จะส่งกลับค่าเริ่มต้นเมื่อได้รับข้อยกเว้นจากเซิร์ฟเวอร์ วิธีการนี้จะทำให้เกิดข้อผิดพลาดอีกครั้ง สิ่งนี้ทำให้แน่ใจได้ว่ามีการใช้พฤติกรรมเริ่มต้นของ VS Code เกี่ยวกับข้อผิดพลาด วิธีการนี้ยังจัดการ RequestCancelled
และ ServerCancelled
ด้วยวิธีต่อไปนี้:- หากได้รับ
ServerCancelled
และไคลเอนต์ไม่ได้ยกเลิกคำขอเช่นกัน โยน CancellationError เพื่อขอให้ไคลเอนต์รันคำขออีกครั้ง - หากได้รับ
RequestCancelled
โดยปกติแล้วไคลเอ็นต์ควรยกเลิกคำขอและโค้ดจะส่งคืนค่าเริ่มต้น (ตามการตีความที่ดีที่สุดของข้อมูลจำเพาะ 3.16) หากไคลเอ็นต์ไม่ได้ยกเลิกการตีความ RequestCancelled
เป็น ServerCancelled
- ตัวจัดการถัดไปของมิดเดิลแวร์ไคลเอ็นต์จะทิ้งผลลัพธ์ของเซิร์ฟเวอร์หากคำขอถูกยกเลิกไปแล้วในฝั่งไคลเอ็นต์โดยส่งคืนค่าเริ่มต้นของรหัส VS สำหรับผู้ให้บริการที่เกี่ยวข้อง (ส่วนใหญ่เป็น
null
) นี่เป็นการเปลี่ยนแปลงครั้งใหญ่เนื่องจากในไลบรารี่รุ่นก่อนๆ มิดเดิลแวร์จะเห็นผลลัพธ์ที่ VS Code ไม่ได้ใช้ การเปลี่ยนแปลงเกิดขึ้นเพื่อประหยัด CPU และหน่วยความจำโดยไม่แปลงผลลัพธ์การตอบสนองที่ไม่ได้ใช้ - ฟังก์ชั่นตัวแปลงทั้งหมดที่ใช้อาเรย์ตอนนี้เป็นแบบอะซิงก์ ให้ผลผลิต และรับโทเค็นการยกเลิก นี่เป็นการเปลี่ยนแปลงครั้งใหญ่และถูกนำมาใช้เพื่อหลีกเลี่ยงการผูกขาดโฮสต์ส่วนขยายในระหว่างการแปลงประเภท
- ประเภทการส่งคืนของ ErrorHandler#error และ ErrorHandler#closed มีการเปลี่ยนแปลงในลักษณะที่เสียหาย ขณะนี้สนับสนุนการส่งคืนข้อความเสริมซึ่งจะแสดงต่อผู้ใช้
- เพิ่มการรองรับค่าอินไลน์
- เพิ่มการรองรับคำแนะนำแบบฝัง
- เพิ่มการรองรับลำดับชั้นของประเภท
- เพิ่มการรองรับเอกสารสมุดบันทึก
โปรโตคอล 3.16.0, 6.0.0 JSON-RPC, ไคลเอนต์ 7.0.0 และเซิร์ฟเวอร์ 7.0.0
สำหรับรายการโดยละเอียดของการเปลี่ยนแปลงที่ทำในเวอร์ชัน 3.16.0 ของโปรโตคอล โปรดดูบันทึกการเปลี่ยนแปลงของข้อกำหนด 3.16
การเปลี่ยนแปลงเฉพาะของห้องสมุดคือ:
- การล้างข้อมูลประเภทคำขอและการแจ้งเตือน ลบพารามิเตอร์ RO ทั่วไปที่ไม่จำเป็นออก นี่คือการเปลี่ยนแปลงครั้งใหญ่ หากต้องการปรับเปลี่ยน เพียงลบอาร์กิวเมนต์ประเภทออก
- เพิ่มแนวคิดใหม่ของ RegistrationType ซึ่งแยกวิธีการลงทะเบียนออกจากคำขอจริงหรือวิธีการแจ้งเตือน นี่เป็นการเปลี่ยนแปลงครั้งใหญ่สำหรับผู้ใช้ฟีเจอร์แบบกำหนดเอง หากต้องการปรับเปลี่ยนให้เปลี่ยนชื่อคุณสมบัติ
messages
เป็น registrationType
และส่งคืน RegistrationType
ที่สอดคล้องกัน เพิ่มเติมลบพารามิเตอร์แรกออกจากวิธี register
- การล้าง
ErrorCodes
รหัสข้อผิดพลาดเฉพาะของ LSP ถูกย้ายไปยังเนมสเปซใหม่ LSPErrorCodes
ErrorCodes
เนมสเปซใน jsonrpc
ไม่ได้สงวนไว้อย่างถูกต้องสำหรับรหัสข้อผิดพลาดเฉพาะ JSON RPC นี่คือการเปลี่ยนแปลงครั้งใหญ่ หากต้องการแก้ไขให้ใช้ LSPErrorCodes
แทน - แยกรหัสออกเป็นโหนดทั่วไปและเบราว์เซอร์เพื่ออนุญาตให้ใช้ไคลเอ็นต์ LSP และโมดูลเซิร์ฟเวอร์ npm ในเว็บเบราว์เซอร์ผ่าน webpack นี่เป็นการ เปลี่ยนแปลงครั้งใหญ่ และอาจนำไปสู่ข้อผิดพลาดในการคอมไพล์/รันไทม์หากไม่นำมาใช้ ขณะนี้ทุกโมดูลมีการส่งออกที่แตกต่างกันสามแบบซึ่งแสดงถึงการแยกออกเป็นโหนดทั่วไปและเบราว์เซอร์ มาดูตัวอย่างที่
vscode-jsonrpc
: (ก) การนำเข้า vscode-jsonrpc
จะนำเข้าเฉพาะโค้ดทั่วไปเท่านั้น (b) การนำเข้า vscode-jsonrpcnode
จะนำเข้าโค้ดทั่วไปและโค้ดโหนด และ (c) อิมพอร์ต vscode-jsonrpcbrowser
จะนำเข้าโค้ดทั่วไปและโค้ดของเบราว์เซอร์ - เพิ่มการรองรับเพื่อควบคุมโครงสร้างพารามิเตอร์เมื่อส่งคำขอและการแจ้งเตือนใน
vscode-jsonrpc
โครงสร้างพารามิเตอร์สามารถควบคุมได้โดยใช้อาร์กิวเมนต์ parameterStructures
เพิ่มเติม เมื่อสร้างคำขอหรือประเภทการแจ้งเตือน หรือเมื่อส่งคำขอหรือการแจ้งเตือนที่ไม่ได้พิมพ์โดยใช้ฟังก์ชัน sendRequest
หรือ sendNotification
ค่าเริ่มต้นคือ ParameterStructures.auto
ซึ่งทำหน้าที่ดังต่อไปนี้:- ใช้
byPosition
สำหรับข้อความที่มีพารามิเตอร์เป็นศูนย์หรือมากกว่าหนึ่งพารามิเตอร์ - สำหรับพารามิเตอร์ตัวหนึ่งจะใช้
byName
สำหรับพารามิเตอร์ที่เป็นตัวอักษรของวัตถุ ใช้ byPosition
สำหรับพารามิเตอร์อื่นๆ ทั้งหมด
3.15.3 โปรโตคอล ไคลเอนต์ 6.1.x และเซิร์ฟเวอร์ 6.1.x
- การเปลี่ยนแปลงเล็กน้อยในการสนับสนุนที่นำเสนอสำหรับโทเค็นความหมาย
3.15.2 โปรโตคอล ไคลเอนต์ 6.1.x และเซิร์ฟเวอร์ 6.1.x
- การสนับสนุนที่เสนอสำหรับโทเค็นความหมาย
โปรโตคอล 3.15.0, ไคลเอนต์ 6.0.0 และเซิร์ฟเวอร์ 6.0.0
- การสนับสนุนความก้าวหน้าสำหรับงานที่ทำและความคืบหน้าของผลลัพธ์บางส่วน
- การใช้งานที่เสนอสำหรับลำดับชั้นการโทร
- เพิ่มโปรโตคอล
SelectionRangeRequest
:- API ใหม่ในประเภท:
SelectionRange
- API ใหม่ในโปรโตคอล:
SelectionRangeRequest
, SelectionRangeParams
, SelectionRangeClientCapabilities
, SelectionRangeServerCapabilities
, SelectionRangeProviderOptions
,
- รองรับการใช้งานเอกสารข้อความแบบกำหนดเอง:
- แพ็คเกจ npm ใหม่
vscode-languageserver-textdocument
ซึ่งจัดส่งการใช้งานเอกสารข้อความมาตรฐานพร้อมการอัพเดตส่วนเพิ่มพื้นฐาน ตอนนี้เซิร์ฟเวอร์จำเป็นต้องกำหนดแพ็คเกจ npm นี้ล่วงหน้า - การใช้งานเอกสารข้อความที่เลิกใช้แล้วในประเภทต่างๆ
- ส่งผลให้เซิร์ฟเวอร์เสียหายเล็กน้อย แทนที่จะทำ
new TextDocuments
ตอนนี้คุณต้องส่งการกำหนดค่าเอกสารข้อความเพื่อให้มีการเรียกกลับเพื่อสร้างและอัปเดตเอกสารข้อความ นี่คือตัวอย่างใน TypeScript และ JavaScript
import { TextDocuments } from 'vscode-languageserver' ;
import { TextDocument } from 'vscode-languageserver-textdocument' ;
const documents = new TextDocuments ( TextDocument ) ;
const server = require ( "vscode-languageserver" ) ;
const textDocument = require ( "vscode-languageserver-textdocument" ) ;
const documents = new server . TextDocuments ( textDocument . TextDocument ) ;
5.1.1 ลูกค้า
- แก้ไขไคลเอ็นต์ [textDocument/rename] ไม่ปฏิบัติตาม
RenameOptions
ขณะลงทะเบียนผู้ให้บริการ
5.1.0 ไคลเอนต์ & 5.1.0 เซิร์ฟเวอร์
- ใช้โปรโตคอลเวอร์ชัน 3.13.0
3.13.0 พิธีสาร
-
FoldingRangeRequestParam
เปลี่ยนชื่อเป็น 'FoldingRangeParams' ( FoldingRangeRequestParam
ยังคงมีไว้สำหรับความเข้ากันได้แบบย้อนหลัง) - เพิ่มการรองรับสำหรับการสร้าง เปลี่ยนชื่อ และลบการดำเนินการไฟล์ในการแก้ไขพื้นที่ทำงาน
ไคลเอนต์ 5.0.0 & เซิร์ฟเวอร์ 5.0.0
- ทำให้ไคลเอนต์ทำงานกับ Electron 2.x ซึ่งใช้มาตั้งแต่ VS Code 1.26.x
- ตรวจสอบว่าเวอร์ชันไคลเอ็นต์ที่คาดไว้ใน
engines.vscode
ในไฟล์ package.json
ตรงกับเวอร์ชัน VS Code ที่ไคลเอ็นต์กำลังทำงานอยู่
ไคลเอนต์ 4.4.0 & เซิร์ฟเวอร์ 4.4.0 & โปรโตคอล 3.10.0
- ใช้โครงร่างเอกสารแบบลำดับชั้น
-
Color
, ColorInformation
, ColorPresentation
ถูกย้ายไปที่ประเภท - เพิ่มโปรโตคอล
FoldingRangeRequest
:- API ใหม่ในประเภท:
FoldingRange
, FoldingRangeKind
- API ใหม่ในโปรโตคอล:
FoldingRangeRequest
, FoldingRangeRequestParam
, FoldingRangeClientCapabilities
, FoldingRangeServerCapabilities
, FoldingRangeProviderOptions
,
ไคลเอนต์ 4.3.0 & เซิร์ฟเวอร์ 4.3.0 & โปรโตคอล 3.9.0
- เพิ่มการสนับสนุนสำหรับคุณสมบัติ
preselect
ใน CompletionItem
ไคลเอนต์ 4.2.0 & เซิร์ฟเวอร์ 4.2.0 & โปรโตคอล 3.8.0
- เพิ่มคลาส CodeAction
- เพิ่มการสนับสนุนสำหรับโค้ดแอคชันลิเทอรัลเป็นค่าส่งคืนของคำขอ textDocument/codeAction
4.1.4 ไคลเอนต์ & 4.1.3 เซิร์ฟเวอร์
- ลูกค้า: ข้อความซ้ำกันที่ส่งหลังจากรีสตาร์ทเซิร์ฟเวอร์
4.1.1 ลูกค้า
- ข้อมูลเกี่ยวกับความผิดพลาดของเซิร์ฟเวอร์สูญหายเมื่อช่องสัญญาณออกถูกปิด
4.1.0 ไคลเอนต์และเซิร์ฟเวอร์
เพิ่มการรองรับข้อมูลที่เกี่ยวข้องในการวินิจฉัย
กลืนข้อยกเว้นการเริ่มต้นแล้ว
ข้อผิดพลาดจากการเปลี่ยนชื่อยังคงไม่แสดงใน VSCode
terminateProcess.sh ไม่ได้จัดส่งในแพ็คเกจ dist
เพิ่มมิดเดิลแวร์เพื่อสกัดกั้น textDocument/publishDiagnostics
4.0.1 ลูกค้า
- ลบคำสั่งบันทึกคอนโซลที่ไม่จำเป็นออก
เซิร์ฟเวอร์และไคลเอนต์ 4.0.0
- ดำเนินการเพิ่มโปรโตคอลล่าสุด สิ่งที่น่าสังเกตคือบริบทของความสมบูรณ์ รายการความสมบูรณ์ที่ขยายได้ และประเภทสัญลักษณ์ ตลอดจนการสนับสนุนมาร์กดาวน์สำหรับรายการความสมบูรณ์และความช่วยเหลือเกี่ยวกับลายเซ็น ย้ายไปยังเวอร์ชัน 4.0.0 ตั้งแต่การแนะนำบริบทที่สมบูรณ์ จำเป็นต้องมีการเปลี่ยนแปลงในมิดเดิลแวร์ไคลเอ็นต์ ลายเซ็นเก่า:
provideCompletionItem?: ( this : void , document : TextDocument , position : VPosition , token : CancellationToken , next : ProvideCompletionItemsSignature ) => ProviderResult < VCompletionItem [ ] | VCompletionList > ;
ขณะนี้มี context
อาร์กิวเมนต์เพิ่มเติม:
provideCompletionItem?: ( this : void , document : TextDocument , position : VPosition , context : VCompletionContext , token : CancellationToken , next : ProvideCompletionItemsSignature ) => ProviderResult < VCompletionItem [ ] | VCompletionList > ;
- การแก้ไขที่น่าสังเกต:
- รับค่าหลังจากรันคำสั่งโดยทางโปรแกรม
- พบกับการเรียกซ้ำแบบไม่สิ้นสุดในโค้ดนี้ใน VSCode 1.18.1
- LanguageClient#handleConnectionClosed ล้มเหลวในการรีสตาร์ทถ้า this._resolvedConnection.dispose() ส่ง
เซิร์ฟเวอร์และไคลเอนต์ 6.0.0
- ย้ายไปที่โปรโตคอล 3.15.0
- ย้ายเป้าหมาย JS ไปที่ ES2017
3.15.0 ประเภทและโปรโตคอล
3.6.1 ประเภท
- เพิ่ม ESM เป็นรูปแบบเอาต์พุต (สำหรับ Webpack และผู้ใช้ ESM อื่นๆ)
3.5.0 เซิร์ฟเวอร์และไคลเอนต์
- อนุญาตให้ไคลเอ็นต์เริ่มเซิร์ฟเวอร์ในโหมดแยกออก หากเซิร์ฟเวอร์ทำงานแยกเดี่ยว ไคลเอนต์จะไม่ตรวจสอบกระบวนการเซิร์ฟเวอร์และปิดการทำงานเมื่อปิดระบบ
- แก้ไขข้อบกพร่อง
3.4.0 เซิร์ฟเวอร์และไคลเอนต์
- มีการเพิ่มโมดูล npm ใหม่
vscode-languageserver-protocol
ซึ่งมีคำจำกัดความของโปรโตคอลใน TypeScript ขณะนี้โมดูลนี้ถูกแชร์ระหว่างไคลเอนต์และเซิร์ฟเวอร์ - เพิ่มการสนับสนุนโปรโตคอลที่นำเสนอในโมดูล
protocol
client
และ server
npm โปรโตคอลที่เสนออาจมีการเปลี่ยนแปลงแม้ว่าจะจัดส่งในโมดูล npm เวอร์ชันเสถียรก็ตาม - มีการเพิ่มโปรโตคอลที่นำเสนอสำหรับคุณสมบัติดังต่อไปนี้:
- configuration : รองรับการดึงการตั้งค่าการกำหนดค่าโดยการส่งคำขอจากเซิร์ฟเวอร์ไปยังไคลเอนต์
- workspaceFolders : รองรับการจัดการโฟลเดอร์รูทมากกว่าหนึ่งโฟลเดอร์ต่อพื้นที่ทำงาน
- colorProvider : รองรับการคำนวณช่วงสีสำหรับเอกสาร
3.3.0 เซิร์ฟเวอร์และไคลเอนต์
- แยกไคลเอนต์ออกเป็นไคลเอนต์ฐานและไคลเอนต์หลักเพื่อรองรับการนำไคลเอนต์กลับมาใช้ใหม่ในสภาพแวดล้อมอื่น
- ทำให้คำขอประมวลผล async มากขึ้น ดังนั้นแทนที่จะประมวลผลคำขอทันทีเมื่อโค้ดได้รับแจ้งโดยการเรียกกลับ Node.js คำขอจะถูกใส่ลงในคิวและประมวลผลจากคิว ซึ่งช่วยให้สามารถวางหรือพับเหตุการณ์ได้ดีขึ้นหากจำเป็น
- การแก้ไขข้อบกพร่องจะเห็นในเดือนเมษายนและพฤษภาคม
3.2.1 เซิร์ฟเวอร์และไคลเอนต์
- แก้ไขการใช้ชื่อที่ไม่ถูกต้องสำหรับวิธีการ
client/registerFeature
: ควรเป็น client/registerCapability
3.2.0 เซิร์ฟเวอร์และไคลเอนต์
- ทำให้
WorkspaceEdit
เป็นไปตามข้อกำหนดเวอร์ชัน 3.x และเข้ากันได้กับไลบรารีเวอร์ชัน 2.x - เพิ่มรหัสข้อผิดพลาด
RequestCancelled
- แก้ไข nodePath ไม่ทำงาน (vscode-tslint)
- แก้ไขการอัปเดตจาก 3.0.4/3.0.5 เป็น 3.1.0 ทำให้ส่วนขยายของฉันพัง
3.1.0 เซิร์ฟเวอร์และไคลเอนต์
- เพิ่มการสนับสนุนสำหรับการส่งไฟล์ไปป์ที่มีชื่อและซ็อกเก็ต
- แก้ไขปัญหาการล็อคตายด้วย node-ipc
เซิร์ฟเวอร์ 3.0.5 และไคลเอนต์ 3.0.4
-
Files.uriToFilePath
ที่เลิกใช้แล้วเพื่อสนับสนุนโมดูล vscode-uri npm ซึ่งให้การใช้งาน URI สำหรับ VS Code ที่สมบูรณ์ยิ่งขึ้น - ทำให้
rootPath
เป็นทางเลือกเนื่องจากเลิกใช้แล้วใน 3.x
3.0.3: ไคลเอนต์ เซิร์ฟเวอร์ และ JSON-RPC
คุณสมบัติใหม่
- ย้ายไลบรารีทั้งหมดไปที่ TypeScript 2.xx
- ไคลเอนต์และเซิร์ฟเวอร์ได้รับการคอมไพล์เป็น ES6 JSON-RPC ยังคงคอมไพล์เป็น ES5
- JSON-RPC รองรับคำขอพารามิเตอร์ n และการเรียกใช้การแจ้งเตือน
- รองรับโปรโตคอลเซิร์ฟเวอร์ภาษาเวอร์ชัน 3.0 ไฮไลท์บางส่วนได้แก่:
- รองรับฟีเจอร์แฟล็ก
- รองรับการลงทะเบียนแบบไดนามิก ในไลบรารีเวอร์ชัน 2.x เซิร์ฟเวอร์ประกาศความสามารถแบบคงที่ ใน 3.x เซิร์ฟเวอร์สามารถลงทะเบียนและยกเลิกการลงทะเบียนตัวจัดการความสามารถแบบไดนามิกโดยใช้คำขอใหม่
client/registerCapability
และ client/unregisterCapability
- รองรับการมอบหมายการดำเนินการคำสั่งผ่าน
workspace/executeCommand
คำขอใหม่ไปยังเซิร์ฟเวอร์
- การสนับสนุนตัวอย่างในรายการที่สมบูรณ์:
- รูปแบบใหม่
InsertTextFormat
- CompletionItem.insertTextFormat ควบคุมว่าการทดสอบที่แทรกถูกตีความว่าเป็นข้อความธรรมดาหรือตัวอย่างข้อมูล
การเปลี่ยนแปลงที่สำคัญ:
- เพื่อให้แน่ใจว่ามีการส่งการแจ้งเตือนและคำขอตามคำสั่งที่ไคลเอ็นต์ภาษาส่งมาในขณะนี้ หากมีการเรียก sendRequest, onRequest, sendNotification หรือ onNotification ก่อนที่ไคลเอ็นต์จะพร้อม ใช้ onReady() Promise เพื่อรอจนกว่าไคลเอ็นต์จะพร้อม
let client = new LanguageClient ( ... ) ;
client . onReady ( ) . then ( ( ) => {
client . onNotification ( ... ) ;
client . sendRequest ( ... ) ;
) ;
- ลบฟังก์ชันโมดูลที่เลิกใช้แล้วบนตัวแปลง code2Protocol และ protocol2Code ใช้คุณสมบัติที่เกี่ยวข้องบนอินสแตนซ์ LanguageClient แทนเพื่อเข้าถึงตัวแปลงเดียวกันกับที่ LanguageClient ใช้
// Old
import { Protocol2Code , ... } from 'vscode-languageclient' ;
Protocol2Code . asTextEdits ( edits ) ;
// New
let client = new LanguageClient ( ... ) ;
client . protocol2CodeConverter . asTextEdits ( edits ) ;
- เนื่องจากการใช้ TypeScript 2.xx และความแตกต่างในผู้ใช้รุ่น d.ts ของเวอร์ชันใหม่ จำเป็นต้องย้ายไปใช้ TypeScript 2.xx เช่นกัน โดยปกติแล้ว
LanguageClient
จะใช้ในส่วนขยาย VS Code คุณสามารถดูขั้นตอนโดยละเอียดเกี่ยวกับวิธีอัปเกรดส่วนขยาย VS Code เป็น TypeScript 2.xx ได้ที่นี่ -
activeSignature
และ activeParameter
โดยที่ประกาศอย่างไม่ถูกต้องว่าเป็นทางเลือกใน SignatureHelp
ตอนนี้พวกเขาได้รับมอบอำนาจ - ไฟล์
protocol.ts
ใช้ประเภท enum ใน 2.x อย่างไรก็ตาม โปรโตคอลนั้นขึ้นอยู่กับตัวเลข เนื่องจากไม่สามารถสันนิษฐานได้เกี่ยวกับการมีอยู่ของประเภท enum ในภาษาที่ใช้งาน เพื่อให้ชัดเจนยิ่งขึ้น enum จึงถูกแทนที่ด้วยประเภทตัวเลขด้วยคำจำกัดความประเภทตัวอักษร ซึ่งอาจส่งผลให้เกิดข้อผิดพลาดในการคอมไพล์หากตัวเลขถูกกำหนดโดยตรงให้กับประเภทแจงนับก่อนหน้าโดยไม่มีการตรวจสอบช่วงที่เหมาะสม - ประเภทคำขอและการแจ้งเตือนตอนนี้เป็นคลาสแทนที่จะเป็นอินเทอร์เฟซ นอกจากนี้ ตอนนี้พวกเขาใช้อาร์กิวเมนต์ชนิดเพิ่มเติมเพื่อพิมพ์ตัวเลือกการลงทะเบียนสำหรับการลงทะเบียนแบบไดนามิก การยอมรับการเปลี่ยนแปลงนั้นค่อนข้างง่าย เพียงสร้าง
RequestType
หรือ NotificationType
ใหม่และเพิ่ม void เป็นประเภทตัวเลือกการลงทะเบียน โปรดอย่าลืมอัปเดตสิ่งนี้ทั้งฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์:
// Old
export namespace MyRequest {
export const type : RequestType < MyParams , MyResult , void > = { get method ( ) { return 'myRequest' ; } } ;
}
export namespace MyNotification {
export const type : NotificationType < MyParams > = { get method ( ) { return 'myNotification' ; } } ;
}
// New
export namespace MyRequest {
export const type = new RequestType < MyParams , MyResult , void , void > ( 'myRequest' ) ;
}
export namespace MyNotification {
export const type = new NotificationType < MyParams , void > ( 'myNotification' ) ;
}
2.6.0: ไคลเอนต์และเซิร์ฟเวอร์
- การสนับสนุนสำหรับผู้ให้บริการลิงค์เอกสาร
- รองรับการแก้ไขข้อความและคำสั่งเพิ่มเติมในรายการที่สมบูรณ์
2.5.0: ไคลเอนต์และเซิร์ฟเวอร์
- การจัดการข้อผิดพลาดที่ดีขึ้นในฝั่งไคลเอ็นต์
- เหตุการณ์สำหรับการเริ่มและหยุดเซิร์ฟเวอร์
- ตัวเลือกการเริ่มต้นสามารถจัดเตรียมไว้เป็นฟังก์ชันได้
- รองรับการเข้ารหัส stdio / stderr
- รองรับการแปลง URI ระหว่างไคลเอนต์และเซิร์ฟเวอร์
- ขณะนี้การบันทึกเซิร์ฟเวอร์ Connection.console ปรากฏในช่องสัญญาณออกที่เกี่ยวข้องแทนในคอนโซลนักพัฒนาซอฟต์แวร์
- หากใช้ช่องทางการสื่อสารที่ไม่ใช่ stdio ระหว่างไคลเอนต์และเซิร์ฟเวอร์ stdio ของเซิร์ฟเวอร์จะถูกเปลี่ยนเส้นทางไปยังช่องสัญญาณเอาท์พุต
- ขณะนี้ลูกค้าสามารถมีรหัสและชื่อได้แล้ว
2.4.0 ไคลเอนต์และเซิร์ฟเวอร์
- ประเภทข้อมูล เช่น Range, Position, TextDocument, Hover, CompletionItem... ที่แยกไปยังโมดูลโหนดใหม่ vscode- languageserver-types โมดูลโหนดใหม่ถูกแชร์ระหว่างเซิร์ฟเวอร์และไคลเอนต์ และยังสามารถใช้งานได้โดยไลบรารีบริการภาษาที่ต้องการใช้ประเภทข้อมูลเดียวกัน
2.3.0: ลูกค้าเท่านั้น
- ขณะนี้ไคลเอ็นต์รีสตาร์ทเซิร์ฟเวอร์หากเซิร์ฟเวอร์ขัดข้องโดยไม่มีการส่งการแจ้งเตือนการออกล่วงหน้า กลยุทธ์ที่ใช้ในการรีสตาร์ทเซิร์ฟเวอร์เป็นแบบเสียบได้ (ดู
LanguageClientOptions.errorHandler
) กลยุทธ์เริ่มต้นรีสตาร์ทเซิร์ฟเวอร์ เว้นแต่เซิร์ฟเวอร์จะขัดข้อง 5 ครั้งขึ้นไปในช่วง 3 นาทีที่ผ่านมา
2.0: สามารถดูคำอธิบายโดยละเอียดของเวอร์ชัน 2.0 ได้ที่นี่ สรุปการเปลี่ยนแปลง:
- รองรับการยกเลิกคำขอ การยกเลิกจะเชื่อมโยงกับโทเค็นการยกเลิกของ VSCode โดยอัตโนมัติ
- การแจ้งเตือนการบันทึกเอกสาร
- เอกสารข้อความที่ซิงค์จะมีหมายเลขเวอร์ชันเอกสารข้อความของ VSCode
1.1.x: มอบคุณสมบัติบริการภาษาทั้งหมดที่มีอยู่ในโฮสต์ส่วนขยายผ่านโปรโตคอลไคลเอนต์ภาษา / เซิร์ฟเวอร์ เพิ่มคุณสมบัติ:
- การดำเนินการกับโค้ด: ให้การดำเนินการเพื่อแก้ไขปัญหาการวินิจฉัย
- Code Lens: จัดเตรียมคำสั่งที่แสดงพร้อมกับข้อความต้นฉบับ
- การจัดรูปแบบ: เอกสารทั้งหมด ช่วงเอกสาร และการจัดรูปแบบตามประเภท
- เปลี่ยนชื่อการปรับโครงสร้างใหม่: จัดให้มีการเปลี่ยนชื่อสัญลักษณ์
1.0.x: เวอร์ชันที่ให้การสนับสนุนคุณสมบัติต่อไปนี้:
- การขนส่ง: stdio และ node IPC สามารถใช้เป็นการขนส่งได้
- การซิงโครไนซ์เอกสาร: การซิงโครไนซ์เอกสารข้อความส่วนเพิ่มและแบบเต็ม
- การซิงโครไนซ์การกำหนดค่า: การซิงโครไนซ์การตั้งค่าการกำหนดค่าไปยังเซิร์ฟเวอร์
- เหตุการณ์ไฟล์: การซิงโครไนซ์เหตุการณ์ไฟล์ไปยังเซิร์ฟเวอร์
- รหัสเสร็จสมบูรณ์: แสดงรายการรหัสที่สมบูรณ์
- จุดเด่นของเอกสาร: เน้นสัญลักษณ์ 'เท่ากัน' ทั้งหมดในเอกสารข้อความ
- โฮเวอร์: ให้ข้อมูลโฮเวอร์สำหรับสัญลักษณ์ที่เลือกในเอกสารข้อความ
- วิธีใช้ลายเซ็น: ให้ความช่วยเหลือเกี่ยวกับลายเซ็นสำหรับสัญลักษณ์ที่เลือกในเอกสารข้อความ
- คำจำกัดความของ Goto: ให้การสนับสนุนคำจำกัดความของ goto สำหรับสัญลักษณ์ที่เลือกในเอกสารข้อความ
- ค้นหาข้อมูลอ้างอิง: ค้นหาข้อมูลอ้างอิงทั่วทั้งโครงการสำหรับสัญลักษณ์ที่เลือกในเอกสารข้อความ
- แสดงรายการสัญลักษณ์เอกสาร: แสดงรายการสัญลักษณ์ทั้งหมดที่กำหนดไว้ในเอกสารข้อความ
- แสดงรายการสัญลักษณ์พื้นที่ทำงาน: แสดงรายการสัญลักษณ์ทั่วทั้งโปรเจ็กต์
0.10.x: เวอร์ชันเริ่มต้นเพื่อสร้าง API ที่ดีสำหรับฝั่งไคลเอ็นต์และเซิร์ฟเวอร์
ใบอนุญาต
เอ็มไอที