bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
From: Collin Funk <collin.funk1@gmail.com>
To: bug-gnulib@gnu.org
Subject: gnulib-tool.py: Simplify use of GLModuleTable accessors.
Date: Tue, 9 Apr 2024 00:47:57 -0700	[thread overview]
Message-ID: <6d87eaa3-3a47-42cd-a99b-f2e02aeddaf4@gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 1755 bytes --]

This patch removes the GLModuleTable.__getitem__ function and changes
the dictionary-like indexing of the GLModuleTable objects to normal
function calls.

I mentioned some of my reasoning here:

    https://lists.gnu.org/archive/html/bug-gnulib/2024-04/msg00113.html

GLConfig has the gnulib-comp.m4 reasoning for using this method [1]. I
don't see a similar reason for doing it in GLModuleTable. Changing
these to normal function calls makes it more clear that a variable is
a GLModuleTable and not a GLConfig or regular dictionary.

I can also see my typos in function names quickly. When I make typos
in keys I have to wait until things break at runtime. :)

Also, now it is easy to see that GLModuleTable.getAvoids() and
GLModuleTable.setAvoids() are not used. I think that it should be fine
to remove them in that case. Then we can make GLModuleTable.avoids a
set since it is only used for membership checks.

$ grep 'getAvoids' pygnulib/*.py
pygnulib/GLConfig.py:    def getAvoids(self) -> list[str]:
pygnulib/GLImport.py:        avoids = self.config.getAvoids()
pygnulib/GLModuleSystem.py:        for avoid in self.config.getAvoids():
pygnulib/GLModuleSystem.py:    def getAvoids(self) -> list[GLModule]:

$ grep 'setAvoids' pygnulib/*.py
pygnulib/GLConfig.py:        self.resetAvoids()
pygnulib/GLConfig.py:            self.setAvoids(avoids)
pygnulib/GLConfig.py:    def setAvoids(self, modules: list[str] | tuple[str]) -> None:
pygnulib/GLConfig.py:    def resetAvoids(self) -> None:
pygnulib/GLImport.py:                self.cache.setAvoids(cleaner(tempdict['gl_AVOID'].split()))
pygnulib/GLModuleSystem.py:    def setAvoids(self, modules: list[GLModule]) -> None:

[1] https://lists.gnu.org/archive/html/bug-gnulib/2024-03/msg00364.html

Collin

[-- Attachment #2: 0001-gnulib-tool.py-Simplify-use-of-GLModuleTable-accesso.patch --]
[-- Type: text/x-patch, Size: 7661 bytes --]

From 9d3be090167bf818850aaf01fb08edfdda2896e0 Mon Sep 17 00:00:00 2001
From: Collin Funk <collin.funk1@gmail.com>
Date: Tue, 9 Apr 2024 00:01:49 -0700
Subject: [PATCH] gnulib-tool.py: Simplify use of GLModuleTable accessors.

* pygnulib/GLModuleSystem.py (GLModuleTable.__getitem__): Remove
function.
* pygnulib/GLImport.py (GLImport.gnulib_cache, GLImport.gnulib_comp)
(GLImport.execute): Use function calls on the GLModuleTable to access
module lists instead of using keys to emulate a dictionary.
---
 ChangeLog                  |  9 +++++++++
 pygnulib/GLImport.py       | 23 ++++++++++++-----------
 pygnulib/GLModuleSystem.py | 15 ---------------
 3 files changed, 21 insertions(+), 26 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 82c9899294..342f232d60 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2024-04-09  Collin Funk  <collin.funk1@gmail.com>
+
+	gnulib-tool.py: Simplify use of GLModuleTable accessors.
+	* pygnulib/GLModuleSystem.py (GLModuleTable.__getitem__): Remove
+	function.
+	* pygnulib/GLImport.py (GLImport.gnulib_cache, GLImport.gnulib_comp)
+	(GLImport.execute): Use function calls on the GLModuleTable to access
+	module lists instead of using keys to emulate a dictionary.
+
 2024-04-08  Collin Funk  <collin.funk1@gmail.com>
 
 	gnulib-tool.py: Use single-quotes for strings, part 2.
diff --git a/pygnulib/GLImport.py b/pygnulib/GLImport.py
index f890c07a86..4a6f7c48b8 100644
--- a/pygnulib/GLImport.py
+++ b/pygnulib/GLImport.py
@@ -524,7 +524,7 @@ class GLImport:
         witness_c_macro = self.config['witness_c_macro']
         vc_files = self.config['vc_files']
         modules = [ str(module)
-                    for module in moduletable['base'] ]
+                    for module in moduletable.getBaseModules() ]
         avoids = self.config['avoids']
         emit += self.emitter.copyright_notice()
         emit += '''#
@@ -630,8 +630,8 @@ AC_DEFUN([%s_EARLY],
   m4_pattern_allow([^gl_ES$])dnl a valid locale name
   m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
   m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable\n''' % (configure_ac, macro_prefix)
-        emit += self.emitter.preEarlyMacros(True, '  ', moduletable['final'])
-        for module in moduletable['final']:
+        emit += self.emitter.preEarlyMacros(True, '  ', moduletable.getFinalModules())
+        for module in moduletable.getFinalModules():
             emit += '  # Code from module %s:\n' % str(module)
             snippet = module.getAutoconfEarlySnippet()
             lines = [ line
@@ -677,7 +677,7 @@ AC_DEFUN([%s_INIT],
         if witness_c_macro:
             emit += '  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [%s])\n' % witness_c_macro
         # Emit main autoconf snippets.
-        emit += self.emitter.autoconfSnippets(moduletable['main'], moduletable['main'],
+        emit += self.emitter.autoconfSnippets(moduletable.getMainModules(), moduletable.getMainModules(),
                                               moduletable, 0, True, False, True, replace_auxdir)
         if witness_c_macro:
             emit += '  m4_popdef([gl_MODULE_INDICATOR_CONDITION])\n'
@@ -700,7 +700,8 @@ AC_DEFUN([%s_INIT],
         emit += '  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], '
         emit += '[$gl_module_indicator_condition])\n'
         # Emit tests autoconf snippets.
-        emit += self.emitter.autoconfSnippets(moduletable['tests'], moduletable['main'] + moduletable['tests'],
+        emit += self.emitter.autoconfSnippets(moduletable.getTestsModules(),
+                                              moduletable.getMainModules() + moduletable.getTestsModules(),
                                               moduletable, 0, True, True, True, replace_auxdir)
         emit += '  m4_popdef([gl_MODULE_INDICATOR_CONDITION])\n'
         emit += self.emitter.initmacro_end('%stests' % macro_prefix, gentests)
@@ -1271,8 +1272,8 @@ AC_DEFUN([%s_FILE_LIST], [\n''' % macro_prefix
         # can run 'autoconf -t', which reads gnulib-comp.m4.
         basename = joinpath(sourcebase, source_makefile_am)
         tmpfile = self.assistant.tmpfilename(basename)
-        emit = self.emitter.lib_Makefile_am(basename,
-                                            self.moduletable['main'], self.moduletable, self.makefiletable,
+        emit = self.emitter.lib_Makefile_am(basename, self.moduletable.getMainModules(),
+                                            self.moduletable, self.makefiletable,
                                             actioncmd, for_test)
         if automake_subdir:
             emit = sp.run([joinpath(DIRS['root'], 'build-aux/prefix-gnulib-mk'), '--from-gnulib-tool',
@@ -1299,8 +1300,8 @@ AC_DEFUN([%s_FILE_LIST], [\n''' % macro_prefix
         if gentests:
             basename = joinpath(testsbase, tests_makefile_am)
             tmpfile = self.assistant.tmpfilename(basename)
-            emit = self.emitter.tests_Makefile_am(basename,
-                                                  self.moduletable['tests'], self.moduletable, self.makefiletable,
+            emit = self.emitter.tests_Makefile_am(basename, self.moduletable.getTestsModules(),
+                                                  self.moduletable, self.makefiletable,
                                                   '%stests_WITNESS' % macro_prefix, for_test)
             with codecs.open(tmpfile, 'wb', 'UTF-8') as file:
                 file.write(emit)
@@ -1360,7 +1361,7 @@ AC_DEFUN([%s_FILE_LIST], [\n''' % macro_prefix
         # - some may have been skipped through --avoid, and since the elements of
         # 'main' modules but not in 'base' modules can go away without explicit
         # notice - through changes in the module dependencies).
-        modules = sorted(set(self.moduletable['base']).intersection(self.moduletable['main']))
+        modules = sorted(set(self.moduletable.getBaseModules()).intersection(self.moduletable.getMainModules()))
         # First the #include <...> directives without #ifs, sorted for convenience,
         # then the #include "..." directives without #ifs, sorted for convenience,
         # then the #include directives that are surrounded by #ifs. Not sorted.
@@ -1388,7 +1389,7 @@ AC_DEFUN([%s_FILE_LIST], [\n''' % macro_prefix
 
         # Get link directives.
         links = [ module.getLink()
-                  for module in self.moduletable['main'] ]
+                  for module in self.moduletable.getMainModules() ]
         lines = [ line
                   for link in links
                   for line in link.split('\n')
diff --git a/pygnulib/GLModuleSystem.py b/pygnulib/GLModuleSystem.py
index c2e20b801a..3ba9b7f473 100644
--- a/pygnulib/GLModuleSystem.py
+++ b/pygnulib/GLModuleSystem.py
@@ -761,21 +761,6 @@ class GLModuleTable:
         result = '<pygnulib.GLModuleTable %s>' % hex(id(self))
         return result
 
-    def __getitem__(self, y: str) -> list[GLModule]:
-        '''x.__getitem__(y) <==> x[y]'''
-        if y == 'base':
-            return self.getBaseModules()
-        elif y == 'final':
-            return self.getFinalModules()
-        elif y == 'main':
-            return self.getMainModules()
-        elif y == 'tests':
-            return self.getTestsModules()
-        elif y == 'avoids':
-            return self.getAvoids()
-        else:  # if y is not in list
-            raise KeyError('GLModuleTable does not contain key: %s' % repr(y))
-
     def addConditional(self, parent: GLModule, module: GLModule, condition: str | bool) -> None:
         '''Add new conditional dependency from parent to module with condition.'''
         if type(parent) is not GLModule:
-- 
2.44.0


             reply	other threads:[~2024-04-09  7:48 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-09  7:47 Collin Funk [this message]
2024-04-09 12:48 ` gnulib-tool.py: Simplify use of GLModuleTable accessors Bruno Haible
2024-04-09 16:24   ` Collin Funk
2024-04-09 16:32     ` Bruno Haible
2024-04-09 16:51       ` Collin Funk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://lists.gnu.org/mailman/listinfo/bug-gnulib

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6d87eaa3-3a47-42cd-a99b-f2e02aeddaf4@gmail.com \
    --to=collin.funk1@gmail.com \
    --cc=bug-gnulib@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).