You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			91 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
""" add language server support to the running jupyter notebook application
 | 
						|
"""
 | 
						|
 | 
						|
import json
 | 
						|
from pathlib import Path
 | 
						|
 | 
						|
import traitlets
 | 
						|
from tornado import ioloop
 | 
						|
 | 
						|
from .handlers import add_handlers
 | 
						|
from .manager import LanguageServerManager
 | 
						|
from .paths import normalized_uri
 | 
						|
 | 
						|
 | 
						|
async def initialize(nbapp, virtual_documents_uri):  # pragma: no cover
 | 
						|
    """Perform lazy initialization."""
 | 
						|
    import concurrent.futures
 | 
						|
 | 
						|
    from .virtual_documents_shadow import setup_shadow_filesystem
 | 
						|
 | 
						|
    manager: LanguageServerManager = nbapp.language_server_manager
 | 
						|
 | 
						|
    with concurrent.futures.ThreadPoolExecutor() as pool:
 | 
						|
        await nbapp.io_loop.run_in_executor(pool, manager.initialize)
 | 
						|
 | 
						|
    servers_requiring_disk_access = [
 | 
						|
        server_id
 | 
						|
        for server_id, server in manager.language_servers.items()
 | 
						|
        if server.get("requires_documents_on_disk", True)
 | 
						|
    ]
 | 
						|
 | 
						|
    if any(servers_requiring_disk_access):
 | 
						|
        nbapp.log.debug(
 | 
						|
            "[lsp] Servers that requested virtual documents on disk: %s",
 | 
						|
            servers_requiring_disk_access,
 | 
						|
        )
 | 
						|
        setup_shadow_filesystem(virtual_documents_uri=virtual_documents_uri)
 | 
						|
    else:
 | 
						|
        nbapp.log.debug(
 | 
						|
            "[lsp] None of the installed servers require virtual documents"
 | 
						|
            " disabling shadow filesystem."
 | 
						|
        )
 | 
						|
 | 
						|
    nbapp.log.debug(
 | 
						|
        "[lsp] The following Language Servers will be available: {}".format(
 | 
						|
            json.dumps(manager.language_servers, indent=2, sort_keys=True)
 | 
						|
        )
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
def load_jupyter_server_extension(nbapp):
 | 
						|
    """create a LanguageServerManager and add handlers"""
 | 
						|
    nbapp.add_traits(language_server_manager=traitlets.Instance(LanguageServerManager))
 | 
						|
    manager = nbapp.language_server_manager = LanguageServerManager(parent=nbapp)
 | 
						|
 | 
						|
    contents = nbapp.contents_manager
 | 
						|
    page_config = nbapp.web_app.settings.setdefault("page_config_data", {})
 | 
						|
 | 
						|
    root_uri = ""
 | 
						|
    virtual_documents_uri = ""
 | 
						|
 | 
						|
    # try to set the rootUri from the contents manager path
 | 
						|
    if hasattr(contents, "root_dir"):
 | 
						|
        root_uri = normalized_uri(contents.root_dir)
 | 
						|
        nbapp.log.debug("[lsp] rootUri will be %s", root_uri)
 | 
						|
        root_path = Path(contents.root_dir)
 | 
						|
        virtual_documents_path = root_path / manager.virtual_documents_dir
 | 
						|
        if virtual_documents_path == root_path:
 | 
						|
            nbapp.log.warn("virtual documents path must differ from the root path")
 | 
						|
            manager.virtual_documents_dir = ".virtual_documents"
 | 
						|
            virtual_documents_path = root_path / manager.virtual_documents_dir
 | 
						|
        virtual_documents_uri = normalized_uri(virtual_documents_path)
 | 
						|
        nbapp.log.debug("[lsp] virtualDocumentsUri will be %s", virtual_documents_uri)
 | 
						|
    else:  # pragma: no cover
 | 
						|
        nbapp.log.warn(
 | 
						|
            "[lsp] %s did not appear to have a root_dir, could not set rootUri",
 | 
						|
            contents,
 | 
						|
        )
 | 
						|
        virtual_documents_uri = normalized_uri(".virtual_documents")
 | 
						|
    page_config.update(rootUri=root_uri, virtualDocumentsUri=virtual_documents_uri)
 | 
						|
 | 
						|
    add_handlers(nbapp)
 | 
						|
 | 
						|
    if hasattr(nbapp, "io_loop"):
 | 
						|
        io_loop = nbapp.io_loop
 | 
						|
    else:
 | 
						|
        # handle jupyter_server 1.x
 | 
						|
        io_loop = ioloop.IOLoop.current()
 | 
						|
 | 
						|
    io_loop.call_later(0, initialize, nbapp, virtual_documents_uri)
 |