[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode eac10d63e6 063/135: Started on bookkeeping of
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode eac10d63e6 063/135: Started on bookkeeping of variables inside anonymous functions |
Date: |
Sun, 29 Jan 2023 03:11:04 -0500 (EST) |
branch: externals/phps-mode
commit eac10d63e61655c51fad3800156ec45324b2b12f
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Started on bookkeeping of variables inside anonymous functions
---
phps-mode-ast.el | 3 ++
phps-mode-parser-sdt.el | 95 +++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 96 insertions(+), 2 deletions(-)
diff --git a/phps-mode-ast.el b/phps-mode-ast.el
index 0e392b127e..3dc1816187 100644
--- a/phps-mode-ast.el
+++ b/phps-mode-ast.el
@@ -42,6 +42,9 @@
(setq
phps-mode-parser-sdt--bookkeeping-symbol-stack
nil)
+ (setq
+ phps-mode-parser-sdt--bookkeeping-anonymous-function-count
+ 0)
(let* ((result (phps-mode-parser--parse t))
(parse-trail (nth 0 result))
(translation (nth 1 result))
diff --git a/phps-mode-parser-sdt.el b/phps-mode-parser-sdt.el
index 139c340665..c55bd4094d 100644
--- a/phps-mode-parser-sdt.el
+++ b/phps-mode-parser-sdt.el
@@ -611,6 +611,11 @@
nil
"Current bookkeeping assignment symbol stack.")
+(defvar-local
+ phps-mode-parser-sdt--bookkeeping-anonymous-function-count
+ nil
+ "Count of anonymous functions.")
+
(defvar
phps-mode-parser-sdt--bookkeeping--superglobal-variable-p
#s(hash-table size 12 test equal rehash-size 1.5 rehash-threshold 0.8125
data ("$_GET" 1 "$_POST" 1 "$_COOKIE" 1 "$_SESSION" 1 "$_REQUEST" 1 "$GLOBALS"
1 "$_SERVER" 1 "$_FILES" 1 "$_ENV" 1 "$argc" 1 "$argv" 1
"$http_​response_​header" 1))
@@ -623,7 +628,8 @@
(interface)
(trait)
(function)
- (is-static-p))
+ (is-static-p)
+ (anonymous-function))
(when scope
(dolist (item scope)
(let ((space-type (car item))
@@ -639,6 +645,8 @@
(setq trait space-name))
((equal space-type 'function)
(setq function space-name))
+ ((equal space-type 'anonymous-function)
+ (setq anonymous-function space-name))
((equal space-type 'object-operator)
(let ((downcased-space-name
(downcase space-name)))
@@ -670,6 +678,13 @@
(format
" id %s"
name)))
+ (when anonymous-function
+ (setq
+ new-symbol-name
+ (format
+ " anonymous function%s%s"
+ anonymous-function
+ new-symbol-name)))
(when is-static-p
(setq
new-symbol-name
@@ -4867,7 +4882,83 @@
;; 439 ((inline_function) (function returns_ref backup_doc_comment "("
parameter_list ")" lexical_vars return_type backup_fn_flags "{"
inner_statement_list "}" backup_fn_flags))
(puthash
439
- (lambda(args _terminals)
+ (lambda(args terminals)
+ (message "439: %S" phps-mode-parser-sdt--bookkeeping-symbol-stack)
+ (message "args: %S" args)
+ (let ((function-start
+ (cdr (cdr (nth 9 terminals))))
+ (function-end
+ (car (cdr (nth 11 terminals)))))
+ (let ((namespace phps-mode-parser-sdt--bookkeeping-namespace)
+ (parameter-list (nth 4 args))
+ (lexical-vars (nth 6 args)))
+ (setq
+ phps-mode-parser-sdt--bookkeeping-anonymous-function-count
+ (1+ phps-mode-parser-sdt--bookkeeping-anonymous-function-count))
+ (push
+ (list
+ 'anonymous-function
+ phps-mode-parser-sdt--bookkeeping-anonymous-function-count)
+ namespace)
+
+ ;; Go through parameters and assign variables inside function
+ (when parameter-list
+ (dolist (parameter parameter-list)
+ (let ((parameter-type
+ (plist-get
+ parameter
+ 'ast-type)))
+ (cond
+ ((equal parameter-type 'attributed-parameter)
+ (let* ((attributed-parameter
+ (plist-get parameter 'parameter))
+ (parameter-name
+ (plist-get attributed-parameter 'ast-name))
+ (parameter-start
+ (plist-get attributed-parameter 'ast-start))
+ (parameter-end
+ (plist-get attributed-parameter 'ast-end)))
+ (push
+ (list
+ parameter-name
+ namespace
+ parameter-start
+ parameter-end)
+ phps-mode-parser-sdt--bookkeeping-symbol-assignment-stack)
+ (push
+ (list
+ parameter-name
+ namespace
+ parameter-start
+ parameter-end)
+ phps-mode-parser-sdt--bookkeeping-symbol-stack)))))))
+
+ ;; TODO Go through lexical_vars and assign inside function
+
+ ;; Go through phps-mode-parser-sdt--bookkeeping-symbol-stack in scope
and add namespace
+ (when phps-mode-parser-sdt--bookkeeping-symbol-stack
+ (dolist (
+ symbol-list
+ phps-mode-parser-sdt--bookkeeping-symbol-stack)
+ (let ((symbol-name (nth 0 symbol-list))
+ (symbol-namespace (nth 1 symbol-list))
+ (symbol-start (nth 2 symbol-list)))
+ (unless (or
+ (gethash
+ symbol-name
+
phps-mode-parser-sdt--bookkeeping--superglobal-variable-p)
+ (< symbol-start function-start)
+ (> symbol-start function-end))
+ (let ((symbol-scope (car (cdr symbol-list))))
+ (push
+ (list
+ 'anonymous-function
+ phps-mode-parser-sdt--bookkeeping-anonymous-function-count)
+ symbol-scope)
+ (setcar
+ (cdr symbol-list)
+ symbol-scope))))))))
+
`(
ast-type
inline-function
- [elpa] externals/phps-mode 002b27bfb7 054/135: Started on bookkeeping support via SDT for class properties via object operator, (continued)
- [elpa] externals/phps-mode 002b27bfb7 054/135: Started on bookkeeping support via SDT for class properties via object operator, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode ad3b10e716 055/135: Added variable reference to bookkeeping stack where it is referencing $this, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 911abb044e 024/135: SDT method_body, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 75743d0c25 022/135: Merge branch 'master' into feature/full-sdt, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 610358e2ef 026/135: SDT for property, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 4981a1eb45 032/135: SDT rules up to 520, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode b2454f1967 058/135: Bookkeeping of static class property, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 962b905ca0 057/135: Bookkeeping working for class non-static properties, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 7b9f8011f1 056/135: More testing, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode e2f2c86e18 059/135: Improved class properties bookkeeping test, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode eac10d63e6 063/135: Started on bookkeeping of variables inside anonymous functions,
Christian Johansson <=
- [elpa] externals/phps-mode e924ac83b6 065/135: Improved bookkeeping test for anonymous function, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode e614a20ada 066/135: Added bookkeeping for referenced foreach variables, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode d33625bb1a 067/135: Bookkeeping for array assignment passing test, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode a646676781 084/135: Passing more bookkeeping tests, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 7609f09f04 090/135: More bookkeeping final touches, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 6c6906317a 095/135: Added bookkeeping test for trait class symbols, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode ada5e79291 097/135: Passing bookkeeping test for class properties in class constructor, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 8aae220c57 098/135: Started on integrating imenu generation in SDT bookkeeping, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 95f563fc70 102/135: Passing bookkeeping tests with integrated imenu generation, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode ae516f9e19 105/135: Using separate imenu items for redeclared symbols, Christian Johansson, 2023/01/29