Language Services and the Core Editor


The new home for Visual Studio documentation is Visual Studio 2017 Documentation on

The latest version of this topic can be found at Language Services and the Core Editor.

Editors in Visual Studio are frequently associated with a language service. Among other things, a language service provides syntax coloring, statement completion, IntelliSense, and text formatting.

When you access the core editor, you do not create document data and document view objects. The IDE creates and controls these two objects, and you obtain handles to them by making the appropriate calls in your editor factory implementation.

For more information, see Determining Which Editor Opens a File in a Project.

By implementing a language service, you can control how data is displayed in the document view. A language service provides information and behavior that is specific to a given language, such as Visual C++. When you create a text buffer and determine the filename extension for the document you are opening, the text buffer determines the language service associated with this file name extension from a registry key, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Editors\{YourLanguageService GUID}\Extensions. The standard VSPackage loading procedure then loads your VSPackage and an instance of your language service is created.

A basic language service is shown in the following illustration.

Language Service Model graphic
Core editor and language service objects

The document data object for the core editor is called a text buffer and is represented by the VsTextBuffer object. The document view object is called a text view and is represented by the VsCodeWindow object. These two objects work together through the language service to provide a unified view of the core editor. Information from the text buffer and the text view displays in a document window called a code window. The code window document is managed by a code window manager.

Providing a Language Service Context by Using the Legacy API
IntelliSense Hosting
Contained Languages
Developing a Legacy Language Service