aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL/lsp/workspace.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyGHDL/lsp/workspace.py')
-rw-r--r--pyGHDL/lsp/workspace.py21
1 files changed, 11 insertions, 10 deletions
diff --git a/pyGHDL/lsp/workspace.py b/pyGHDL/lsp/workspace.py
index 6c312b203..6d5e40d1c 100644
--- a/pyGHDL/lsp/workspace.py
+++ b/pyGHDL/lsp/workspace.py
@@ -78,20 +78,20 @@ class Workspace(object):
def root_uri(self):
return self._root_uri
- def _create_document(self, doc_uri, sfe, version=None):
+ def _create_document(self, doc_uri, sfe, lib, version=None):
"""Create a document and put it in this workspace."""
- doc = document.Document(doc_uri, sfe, version)
+ doc = document.Document(doc_uri, sfe, lib, version)
self._docs[doc_uri] = doc
self._fe_map[sfe] = doc
return doc
- def create_document_from_sfe(self, sfe, abspath):
+ def create_document_from_sfe(self, sfe, abspath, lib):
# A filename has been given without a corresponding document.
# Create the document.
# Common case: an error message was reported in a non-open document.
# Create a document so that it could be reported to the client.
doc_uri = lsp.path_to_uri(os.path.normpath(abspath))
- return self._create_document(doc_uri, sfe)
+ return self._create_document(doc_uri, sfe, lib)
def create_document_from_uri(self, doc_uri, source=None, version=None):
# A document is referenced by an uri but not known. Load it.
@@ -102,7 +102,7 @@ class Workspace(object):
else:
source = source.encode(document.Document.encoding, "replace")
sfe = document.Document.load(source, os.path.dirname(path), os.path.basename(path))
- return self._create_document(doc_uri, sfe)
+ return self._create_document(doc_uri, sfe, None)
def get_or_create_document(self, doc_uri):
res = self.get_document(doc_uri)
@@ -145,11 +145,11 @@ class Workspace(object):
if not os.path.isabs(filename):
dirname = pyutils.name_image(files_map.Get_Directory_Name(sfe))
filename = os.path.join(dirname, filename)
- doc = self.create_document_from_sfe(sfe, filename)
+ doc = self.create_document_from_sfe(sfe, filename, None)
return doc
- def add_vhdl_file(self, name):
- log.info("loading %s", name)
+ def add_vhdl_file(self, name, lib):
+ log.info("loading %s in library %s", name, lib)
if os.path.isabs(name):
absname = name
else:
@@ -162,7 +162,7 @@ class Workspace(object):
except OSError as err:
self._server.show_message(lsp.MessageType.Error, f"cannot load {name}: {err.strerror}")
return
- doc = self.create_document_from_sfe(sfe, absname)
+ doc = self.create_document_from_sfe(sfe, absname, lib)
doc.parse_document()
def read_project(self):
@@ -222,8 +222,9 @@ class Workspace(object):
if not isinstance(name, str):
raise ProjectError("a 'file' is not a string")
lang = f.get("language", "vhdl")
+ lib = f.get("library", None)
if lang == "vhdl":
- self.add_vhdl_file(name)
+ self.add_vhdl_file(name, lib)
except ProjectError as e:
self._server.show_message(lsp.MessageType.Error, f"error in project file: {e.msg}")