diff options
Diffstat (limited to 'pyGHDL/lsp/workspace.py')
| -rw-r--r-- | pyGHDL/lsp/workspace.py | 21 | 
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}")  | 
