/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
**
****************************************************************************/

/*!
    \contentspage index.html
    \previouspage creator-editor-fakevim.html
    \page creator-language-servers.html
    \nextpage creator-mime-types.html

    \title Using Language Servers

    For several programming languages, a \e {language server} is available
    that provides information about the code to IDEs as long as they support
    communication via the language server protocol (LSP). This enables the
    IDE to provide the following services:

    \list
        \li \l{Completing Code}{Code completion}
        \li Highlighting the symbol under cursor
        \li \l{Moving to Symbol Definition or Declaration}
            {Moving to the symbol definition}
        \li Inspecting code by viewing the document
            \l{Viewing Defined Types and Symbols}{outline}
        \li \l{Finding Symbols}{Finding references to symbols}
        \li Code actions
        \li Integrating diagnostics from the language server
    \endlist

    By providing a client for the language server protocol, \QC can support
    the above features for several other programming languages besides C++.
    However, the experimental client does not support language servers that
    require special handling.

    \QC uses the \l{https://www.iana.org/assignments/media-types/media-types.xhtml}
    {MIME type} of the file to determine which language server to request
    information from when you open a file for editing. Add new MIME types or
    file patterns to match language servers. If you do not set at least one MIME
    type or file pattern, no files will be sent to the language server. This is
    done to avoid unnecessary traffic and inaccurate information, as files are
    only sent to the languge server if they are known to be handled by it. For
    more information about how \QC uses MIME types, see \l {Editing MIME Types}.

    The experimental language service client has been mostly tested with Python.
    If problems arise when you try some other language, please select
    \uicontrol Help > \uicontrol {Report Bug} to report them in the Qt Bug
    Tracker. The reports should include \QC console output with the environment
    variable \c {QT_LOGGING_RULES=qtc.languageclient.*=true} set.

    To use a language server:

    \list 1
        \li Enable the language server client by selecting \uicontrol Help >
            \uicontrol {About Plugins} > \uicontrol {Other Languages} >
            \uicontrol {Language Client} (or \uicontrol {Qt Creator} >
            \uicontrol {About Plugins} > \uicontrol {Other Languages} >
            \uicontrol {Language Client} on \macos).
        \li Restart \QC to load the language client plugin.
        \li Select \uicontrol Tools > \uicontrol Options >
            \uicontrol {Language Client} (or \uicontrol {Qt Creator} >
            \uicontrol Preferences > \uicontrol {Language Client} > on
            \macos) to view a list of language servers.
            \image qtcreator-language-client-options.png "Language client options page"
        \li Select the check box next to the language server name to enable the
            language server.
        \li Select \uicontrol Add to add language servers.
        \li In the \uicontrol Name field, enter a name for the language server.
        \li In the \uicontrol {Language} field, select
            \uicontrol {Set MIME Types} to select the MIME types of the files to
            send to the language server. In the field below, you can enter file
            patterns to extend the MIME types, separated by semicolons.
        \li In the \uicontrol Executable field, enter the path to the language
            server executable.
        \li In the \uicontrol Arguments field, enter any required command line
            arguments.
    \endlist

    To remove language servers from the list, select \uicontrol Delete.
*/
