Skip to content

Commit

Permalink
some python fixups
Browse files Browse the repository at this point in the history
  • Loading branch information
cooljeanius committed Oct 25, 2023
1 parent 330a48a commit a611c05
Show file tree
Hide file tree
Showing 6 changed files with 233 additions and 96 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ jobs:
fi; \
fi
- name: Syntax check
if: matrix.language == 'python'
run: echo "Checking syntax... $(python -m py_compile etc/emacs.py)"
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/emacs-apple.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
- name: checkout
uses: actions/[email protected]
- run: brew update
- run: brew install make automake gettext texinfo gawk gdb coreutils gnu-sed gnu-which llvm clang-build-analyzer clang-format
- run: brew install make automake gettext texinfo gawk gdb coreutils gnu-sed gnu-which clang-build-analyzer clang-format
env:
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
HOMEBREW_VERBOSE_USING_DOTS: 1
Expand Down
2 changes: 2 additions & 0 deletions etc/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ images/icons/*
*.log
refcards/emacsver.tex
refcards/*.pdf
*.pyc
__pycache__/*
132 changes: 72 additions & 60 deletions etc/emacs.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
"""Definitions used by commands sent to inferior Python in python.el."""

# -*- coding: utf-8; mode: python; indent-tabs-mode: nil; -*-
# Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
# Author: Dave Love <[email protected]>

Expand All @@ -21,92 +22,103 @@
# Boston, MA 02110-1301, USA.

import os, sys, traceback, inspect, rlcompleter, __main__
import importlib

__all__ = ["eexecfile", "args", "complete", "ehelp", "eimport"]

def eexecfile (file):

def eexecfile(file):
"""Execute FILE and then remove it.
If we get an exception, print a traceback with the top frame
(oursleves) excluded."""
try:
try: execfile (file, globals (), globals ())
except:
(type, value, tb) = sys.exc_info ()
# Lose the stack frame for this location.
tb = tb.tb_next
if tb is None: # print_exception won't do it
print "Traceback (most recent call last):"
traceback.print_exception (type, value, tb)
try:
exec(compile(open(file, "rb").read(), file, "exec"), globals(), globals())
except:
(type, value, tb) = sys.exc_info()
# Lose the stack frame for this location.
tb = tb.tb_next
if tb is None: # print_exception fails to do it
print("Traceback (most recent call last):")
traceback.print_exception(type, value, tb)
finally:
os.remove (file)
os.remove(file)


def eargs (name):
def eargs(name):
"Get arglist of NAME for Eldoc &c."
try:
parts = name.split ('.')
if len (parts) > 1:
exec 'import ' + parts[0] # might fail
func = eval (name)
if inspect.isbuiltin (func):
doc = func.__doc__
if doc.find (' ->') != -1:
print '_emacs_out', doc.split (' ->')[0]
elif doc.find ('\n') != -1:
print '_emacs_out', doc.split ('\n')[0]
return
if inspect.ismethod (func):
func = func.im_func
if not inspect.isfunction (func):
parts = name.split(".")
if len(parts) > 1:
exec("import " + parts[0]) # might fail
func = eval(name)
if inspect.isbuiltin(func):
doc = func.__doc__
if doc.find(" ->") != -1:
print("_emacs_out", doc.split(" ->")[0])
elif doc.find("\n") != -1:
print("_emacs_out", doc.split("\n")[0])
return
(args, varargs, varkw, defaults) = inspect.getargspec (func)
# No space between name and arglist for consistency with builtins.
print '_emacs_out', \
func.__name__ + inspect.formatargspec (args, varargs, varkw,
defaults)
except: pass

def complete (text, namespace = None):
if inspect.ismethod(func):
func = func.__func__
if not inspect.isfunction(func):
return
(args, varargs, varkw, defaults) = inspect.getargspec(func)
# No space between name and arglist for consistency with builtins.
print(
"_emacs_out",
func.__name__ + inspect.formatargspec(args, varargs, varkw, defaults),
)
except:
pass


def complete(text, namespace=None):
"""Complete TEXT in NAMESPACE and print a Lisp list of completions.
NAMESPACE is currently not used."""
if namespace is None: namespace = __main__.__dict__
c = rlcompleter.Completer (namespace)
if namespace is None:
namespace = __main__.__dict__
c = rlcompleter.Completer(namespace)
try:
if '.' in text:
matches = c.attr_matches (text)
else:
matches = c.global_matches (text)
print '_emacs_out (',
for elt in matches:
print '"%s"' % elt,
print ')'
if "." in text:
matches = c.attr_matches(text)
else:
matches = c.global_matches(text)
print("_emacs_out (", end=" ")
for elt in matches:
print('"%s"' % elt, end=" ")
print(")")
except:
print '_emacs_out ()'
print("_emacs_out ()")


def ehelp (name, g, l):
def ehelp(name, g, l):
"""Get help on string NAME using globals G and locals L.
First try to eval name for, e.g. user definitions where we need
the object. Otherwise try the string form."""
try: help (eval (name, g, l))
except: help (name)
try:
help(eval(name, g, l))
except:
help(name)

def eimport (mod, dir):

def eimport(mod, dir):
"""Import module MOD with directory DIR at the head of the search path.
NB doesn't load from DIR if MOD shadows a system module."""
path0 = sys.path[0]
sys.path[0] = dir
try:
try:
if globals().has_key(mod) and inspect.ismodule (eval (mod)):
reload(eval (mod))
else:
globals ()[mod] = __import__ (mod)
except:
(type, value, tb) = sys.exc_info ()
print "Traceback (most recent call last):"
traceback.print_exception (type, value, tb.tb_next)
if mod in globals() and inspect.ismodule(eval(mod)):
importlib.reload(eval(mod))
else:
globals()[mod] = __import__(mod)
except:
(type, value, tb) = sys.exc_info()
print("Traceback (most recent call last):")
traceback.print_exception(type, value, tb.tb_next)
finally:
sys.path[0] = path0
sys.path[0] = path0


print '_emacs_ok' # ready for input and can call continuation
print("_emacs_ok") # ready for input and can call continuation

# arch-tag: d90408f3-90e2-4de4-99c2-6eb9c7b9ca46
96 changes: 96 additions & 0 deletions etc/emacs.py_2to3.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
--- emacs.py (original)
+++ emacs.py (refactored)
@@ -22,6 +22,7 @@
# Boston, MA 02110-1301, USA.

import os, sys, traceback, inspect, rlcompleter, __main__
+import importlib

__all__ = ["eexecfile", "args", "complete", "ehelp", "eimport"]

@@ -29,13 +30,13 @@
"""Execute FILE and then remove it.
If we get an exception, print a traceback with the top frame
(oursleves) excluded."""
- try: execfile (file, globals (), globals ())
+ try: exec(compile(open(file, "rb").read(), file, 'exec'), globals (), globals ())
except:
(type, value, tb) = sys.exc_info ()
# Lose the stack frame for this location.
tb = tb.tb_next
if tb is None: # print_exception fails to do it
- print "Traceback (most recent call last):"
+ print("Traceback (most recent call last):")
traceback.print_exception (type, value, tb)
finally:
os.remove (file)
@@ -45,24 +46,24 @@
try:
parts = name.split ('.')
if len (parts) > 1:
- exec 'import ' + parts[0] # might fail
+ exec('import ' + parts[0]) # might fail
func = eval (name)
if inspect.isbuiltin (func):
doc = func.__doc__
if doc.find (' ->') != -1:
- print '_emacs_out', doc.split (' ->')[0]
+ print('_emacs_out', doc.split (' ->')[0])
elif doc.find ('\n') != -1:
- print '_emacs_out', doc.split ('\n')[0]
+ print('_emacs_out', doc.split ('\n')[0])
return
if inspect.ismethod (func):
- func = func.im_func
+ func = func.__func__
if not inspect.isfunction (func):
return
(args, varargs, varkw, defaults) = inspect.getargspec (func)
# No space between name and arglist for consistency with builtins.
- print '_emacs_out', \
+ print('_emacs_out', \
func.__name__ + inspect.formatargspec (args, varargs, varkw,
- defaults)
+ defaults))
except: pass

def complete (text, namespace = None):
@@ -75,12 +76,12 @@
matches = c.attr_matches (text)
else:
matches = c.global_matches (text)
- print '_emacs_out (',
+ print('_emacs_out (', end=' ')
for elt in matches:
- print '"%s"' % elt,
- print ')'
+ print('"%s"' % elt, end=' ')
+ print(')')
except:
- print '_emacs_out ()'
+ print('_emacs_out ()')

def ehelp (name, g, l):
"""Get help on string NAME using globals G and locals L.
@@ -96,17 +97,17 @@
sys.path[0] = dir
try:
try:
- if globals().has_key(mod) and inspect.ismodule (eval (mod)):
- reload(eval (mod))
+ if mod in globals() and inspect.ismodule (eval (mod)):
+ importlib.reload(eval (mod))
else:
globals ()[mod] = __import__ (mod)
except:
(type, value, tb) = sys.exc_info ()
- print "Traceback (most recent call last):"
+ print("Traceback (most recent call last):")
traceback.print_exception (type, value, tb.tb_next)
finally:
sys.path[0] = path0

-print '_emacs_ok' # ready for input and can call continuation
+print('_emacs_ok') # ready for input and can call continuation

# arch-tag: d90408f3-90e2-4de4-99c2-6eb9c7b9ca46
Loading

0 comments on commit a611c05

Please sign in to comment.