Emacs подсветка синтаксиса Lisp

Давайте посмотрим, что делает этот оператор from m import *:

>>> dis.dis(compile('from m import *', '', 'single'))
  1           0 LOAD_CONST               0 (0)
              2 LOAD_CONST               1 (('*',))
              4 IMPORT_NAME              0 (m)
              6 IMPORT_STAR
              8 LOAD_CONST               2 (None)
             10 RETURN_VALUE

Ключевым моментом здесь является то, что он фактически вызывает выделенный код операции IMPORT_STAR, и это реализация, специфичная для интерпретатора, который будет выполнить этот код Этот оператор был первоначально указан в PEP-0221 , но подробности реализации указаны в комментариях, представленных в этом конкретном коммите .

В CPython это найдено в /Python/ceval.c (Python 3.7.2), и оно по очереди вызывает import_all_from , которое показывает общую логику того, что это на самом деле делает внутри интерпретатор байт-кода.

В PyPy это найдено в /pypy/interpreter/pyopcode.py , и опять же, как и в реализации C, оно вызывает функцию import_all_from , определенную в RPython, которая также имеет похожую логику но в более привычном синтаксисе для программистов на Python.

Как в реализации CPython, так и в pypy, если __all__ представлен в виде списка имен в импортированном модуле, все соответствующие назначения будут добавлены в текущую локальную область, включая те имена, которые имеют префикс с подчеркиванием ([ 118]). В противном случае каждое назначение внутри модуля, который не начинается с подчеркивания, будет добавлено к текущей локальной области.

5
задан Chris Lutz 15 May 2009 в 04:09
поделиться

5 ответов

You're looking in the wrong place. Look at "font-lock-mode".

13
ответ дан 18 December 2019 в 07:31
поделиться

Есть связанный вопрос о том, как определить основной режим с подсветкой синтаксиса с помощью 'define-generic-mode . Вопрос направлен на выяснение того, как заставить работать подсветку синтаксиса.

5
ответ дан 18 December 2019 в 07:31
поделиться

к сожалению, вы искали неправильные термины, "подсветка синтаксиса" не является словарем emacs :). Вам следовало поискать что-то вроде «write emacs mode».

Для этого уже был вопрос: « Как написать emacs-режим для нового языка » с некоторыми хорошими указателями.

2
ответ дан 18 December 2019 в 07:31
поделиться

Если вы хотите написать свое собственное выделение, другой вопрос охватывает это и может быть для вас ценным. Он включал этот фрагмент кода:

(defun django-highlight-comments ()
  (interactive "p")
  (highlight-regexp "{%.*?%}" 'hi-orange))
(add-hook 'html-mode-hook 'django-highlight-comments)

Код любезно предоставлен Ашутошем Мехра ответом .

1
ответ дан 18 December 2019 в 07:31
поделиться
0
ответ дан 18 December 2019 в 07:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: