2012-05-05 46 views
25

Tôi muốn viết bổ sung vào intellisense trong Visual Studio.Tiện ích mở rộng Intellisense tùy chỉnh

Có thể mở rộng không, từ nghiên cứu của tôi, tôi không tìm thấy bất kỳ mẫu hoặc tài liệu nào về tiện ích mở rộng intellisense.

Làm thế nào tôi có thể nhận được IntelliSense để hiển thị một thông điệp HelloWorld đơn giản như sau (nơi hello world được thêm vào thời gian chạy đến IntelliSense cho String):

enter image description here

+7

@oded ive chỉ cần bỏ ra một vài giờ tìm kiếm qua google, MSDN ect và havent được thể tìm thấy bất cứ điều gì ở tất cả về mở rộng intellisense, bạn có bất cứ đề nghị về nơi để thậm chí tìm nó? –

+0

Xin lỗi Luke, tôi không mặc dù [Visual Studio Extensibility forum] (http://social.msdn.microsoft.com/Forums/en-US/vsx/threads) sẽ là một nơi khởi đầu tốt. Nhưng bạn _could_ rephrase câu hỏi để không yêu cầu các liên kết và thực sự là một câu hỏi lập trình trên chủ đề. – Oded

+1

Ngoài ra, một ví dụ về những gì bạn muốn thêm vào Intellisense sẽ giúp ích rất nhiều. Có một số kỹ thuật khác nhau có thể cần thiết ... –

Trả lời

29

Vì vậy, trong Visual Studio 2010 và sau đó , các API mở rộng mà bạn muốn ở trong không gian tên Microsoft.VisualStudio.Languages.IntelliSense. Ở mức cao, bạn muốn MEF xuất một số ICompletionSourceProvider sẽ cung cấp các mục bạn cần. Có hai bài đăng trên blog tốt là herehere thể hiện kỹ thuật cơ bản.

Có hai vấn đề mà bạn sẽ gặp phải nếu bạn muốn làm cho ảnh chụp màn hình của mình trở thành hiện thực. (Đây là lý do tại sao tôi hỏi kịch bản, như lời khuyên của tôi ở đây sẽ thay đổi.) Đầu tiên, phương pháp này không hợp pháp cho phép bạn nối thêm vào một tập hợp hoàn thành hiện có, nhưng thay vào đó cung cấp một tập mới. Trong giao diện người dùng, tab này xuất hiện dưới dạng hai tab, như tab Chung/Tất cả trong trình chỉnh sửa Visual Basic. Đây là giới hạn của API hiện tại. Bạn có thể thử sửa đổi một trong các bộ hoàn thành hiện có trong số AugmentCompletionSource của mình nhưng tôi không biết liệu nó có hoạt động hay không. Nó chắc chắn không được hỗ trợ, trong mọi trường hợp.

Thứ hai, thật khó để biết khi nào và ở đâu để giới thiệu mọi thứ. Trong ví dụ của bạn, bạn đã nói "IntelliSense cho string". Đáng buồn thay, không có bất kỳ API nào (hiện tại) trong VS cho bạn biết điều gì trước dấu chấm. Bạn có thể thực hiện một số chẩn đoán đơn giản hoặc thử triển khai một số trình phân tích cú pháp đó là Good Enough ™ cho kịch bản của bạn, nhưng bạn sẽ phải chấp nhận ngay bây giờ rằng bạn sẽ không có kết quả hoàn hảo.

Dự án Roslyn nhằm khắc phục sự cố thứ hai, vì vậy bạn có thể thấy hữu ích khi khám phá thêm một chút. Vì chúng tôi hy vọng rằng nhiều người sẽ muốn gia hạn hoàn thành, chúng tôi cũng đang suy nghĩ về việc cung cấp các API có thể mở rộng khác nên bạn không phải cuộn một số từ ICompletionSourceProvider từ đầu, nhưng các API đó không có trong CTP hiện tại.

[Disclaimer:. Tôi là một thành viên của nhóm Roslyn người làm việc trên IntelliSense]

+0

Cảm ơn im khá chắc chắn đây là những gì sau, Thật là xấu hổ bạn không có quyền truy cập vào các công cụ trước khi., API đó phải có một nơi nào đó để thường xuyên VS intelliSense để làm việc để buồn của nó không công khai.Ive sử dụng công cụ roslyn trước để tôi sẽ giải quyết vấn đề gì đó để tìm ra chủ đề là –

+0

@ Jason, tôi đã cố gắng thêm một nội dung khác cho javascript '[Order (Before =" High ")] \t [Export (typeof (ICompletionSourceProvider)), ContentType ("JavaScript"), Tên ("EnhancedJavaScriptCompletion")] \t nội bộ lớp kín JavaScriptCompletionSourceProvider: ICompletionSourceProvider \t { } ' nhưng nó Nevers bước vào debugger, mặc dù các breakpoint có vẻ như mã được tải. Bạn có thể giúp tôi không? – Adaptabi

+1

@DotNetWise: bạn nên tạo câu hỏi mới để người khác có thể trả lời câu hỏi. ;-) –

Các vấn đề liên quan