From 63afbd12df95763fbc61161e7cf7279b623c706b Mon Sep 17 00:00:00 2001 From: Sameer Rahmani Date: Sun, 25 Aug 2019 22:10:23 +0100 Subject: [PATCH] devtools module has been splitted into submodules --- lib/extensions/development.el | 1 + lib/extensions/editor.el | 1 - lib/fg42/ability.el | 27 ++++++++++++ lib/fg42/devtools/console.el | 28 +++++++++--- lib/fg42/devtools/core.el | 62 +++++++++++++-------------- lib/fg42/devtools/vars.el | 58 +++++++++++++++++++++++++ lib/fg42/logger.el | 8 ++++ lib/fg42/utils.el | 8 +++- lib/fg42/{devtools => }/utils/json.el | 0 9 files changed, 154 insertions(+), 39 deletions(-) create mode 100644 lib/fg42/ability.el create mode 100644 lib/fg42/devtools/vars.el create mode 100644 lib/fg42/logger.el rename lib/fg42/{devtools => }/utils/json.el (100%) diff --git a/lib/extensions/development.el b/lib/extensions/development.el index 721f207..8b64fe6 100644 --- a/lib/extensions/development.el +++ b/lib/extensions/development.el @@ -12,6 +12,7 @@ (depends-on 'dockerfile-mode) (depends-on 'quickrun) (depends-on 'dash) +(depends-on 'websocket) (with-ability parinfer (depends-on 'parinfer)) diff --git a/lib/extensions/editor.el b/lib/extensions/editor.el index 3c4035d..8db71a8 100644 --- a/lib/extensions/editor.el +++ b/lib/extensions/editor.el @@ -80,7 +80,6 @@ (with-ability tabbar (depends-on 'tabbar)) - (if (eq system-type 'darwin) (depends-on 'exec-path-from-shell)) diff --git a/lib/fg42/ability.el b/lib/fg42/ability.el new file mode 100644 index 0000000..757c935 --- /dev/null +++ b/lib/fg42/ability.el @@ -0,0 +1,27 @@ +;;; ability --- ability library of FG42 +;;; Commentary: +;;; +;;; Code: +(require 'cl-lib) + +(defvar fg42--abilities '() + "Internal data structure to store abilities.") + +(cl-defstruct fg42-ability + "Each FG42 ability should implement a copy of this structure." + name + docs + depends-on + (start! nil) + (stop! nil)) + +(defun register-ability (ability-name) + "Register the given ABILITY-NAME as an activity." + (add-to-list + fg42--abilities + '(ability-name . (make-fg42-ability :name ability-name)))) + +(defun start-ability (ability-name)) + +(provide 'fg42/ability) +;;; ability ends here diff --git a/lib/fg42/devtools/console.el b/lib/fg42/devtools/console.el index 28fd4b3..fa68cb4 100644 --- a/lib/fg42/devtools/console.el +++ b/lib/fg42/devtools/console.el @@ -85,6 +85,7 @@ (defvar fg42/devtools-console-input) +(defun fg42/devtools-append-to-console-buffer) (define-derived-mode fg42/devtools-console-mode comint-mode "fg42/devtools-console" "Provide a REPL into the visiting browser." :group 'fg42/devtools @@ -106,12 +107,29 @@ (comint-output-filter (fg42/devtools-console-process) fg42/devtools-console-prompt) (set-process-filter (fg42/devtools-console-process) 'comint-output-filter))) +(defun fg42/devtools-append-to-console-buffer (log-entry) + (let* ((message (plist-get data :message)) + (url (plist-get message :url)) + (column (plist-get message :column)) + (line (plist-get message :line)) + (type (plist-get message :type)) + (level (plist-get message :level)) + (text (plist-get message :text))) + (->buffer + fg42/devtools-console-buffer-name + (format "[%s:%s:%s]<%s>: %s" + (apply-face 'error url) + line + column + level + message)))) -(defun fg42/devtools-console-append (data) - (let ((buffer (get-buffer "*fg42/devtools-console*"))) - (when buffer - (with-current-buffer buffer - (comint-output-filter (fg42/devtools-console-process) (concat data "\n")))))) + +;; (defun fg42/devtools-console-append (data) +;; (let ((buffer (get-buffer-create fg42/devtools-console-buffer-name))) +;; (when buffer +;; (with-current-buffer buffer +;; (comint-output-filter (fg42/devtools-console-process) (concat data "\n")))))) (defun fg42/devtools-console-process () diff --git a/lib/fg42/devtools/core.el b/lib/fg42/devtools/core.el index a18f745..089f379 100644 --- a/lib/fg42/devtools/core.el +++ b/lib/fg42/devtools/core.el @@ -33,27 +33,9 @@ (require 'dash) (require 'websocket) +(require 'fg42/utils/json) (require 'fg42/utils) - -;;; Customs & Vars ------------------------------------------------------------ -(defcustom fg42/devtools-remote-host "127.0.0.1" - "Default host for connection to WebKit remote debugging API." - :group 'fg42/devtools) - - -(defcustom fg42/devtools-remote-port 9222 - "Default port for connection to WebKit remote debugging API." - :group 'fg42/devtools) - - -(defvar fg42/devtools-socket nil - "Websocket connection to WebKit remote debugging API.") - - -(defvar fg42/devtools-rpc-id 0) -(defvar fg42/devtools-rpc-callbacks nil) -(defvar fg42/devtools-rpc-scripts nil - "List of JavaScript files available for live editing.") +(require 'fg42/devtools/vars) ;;; Functions ----------------------------------------------------------------- (defun fg42/devtools-next-rpc-id () @@ -66,6 +48,7 @@ (let ((hook (intern (number-to-string id) fg42/devtools-rpc-callbacks))) (add-hook hook fn t))) + (defun fg42/devtools-dispatch-callback (id data) "Execute the callback registered by the given ID with the given DATA." (let ((hook (intern (number-to-string id) fg42/devtools-rpc-callbacks))) @@ -91,9 +74,12 @@ (when (and (eq extension? :json-false) (not (string-equal "" url))) (add-to-list 'fg42/devtools-rpc-scripts (list :id id :url url))))) +(defun fg42/devtools->inspect-buffer (data) + (inspect-data-append (list "ERRRR" data))) (defun fg42/devtools-on-script-failed-to-parse (data) - (fg42/devtools-console-append (format "%s" data))) + ;; (fg42/devtools-console-append (format "%s" data)) + (fg42/devtools->inspect-buffer data)) (defun fg42/devtools-on-message-added (data) @@ -105,11 +91,16 @@ (level (plist-get message :level)) (text (plist-get message :text))) ;; TODO: add colors based on level - (fg42/devtools-console-append - (propertize - (format "%s: %s\t%s (line: %s column: %s)" - level text url line column) - 'font-lock-face (intern (format "fg42/devtools-log-%s" level)))))) + ;;(fg42/devtools-console-append + (fg42/devtools->inspect-buffer data))) + ;; (fg42/devtools->inspect-buffer + ;; (propertize + ;; (format "%s: %s\t%s (line: %s column: %s)" + ;; level text url line column) + ;; 'font-lock-face (intern (format "fg42/devtools-log-%s" level)))))) + +(defun fg42/devtools-log-added (data) + (fg42/devtools-append-to-console-buffer data)) (defun fg42/devtools-on-message (socket data) @@ -122,12 +113,13 @@ ("Debugger.scriptParsed" (fg42/devtools-on-script-parsed params)) ;; we are getting an error in Console.messageAdded ;; ("Debugger.scriptFailedToParse" (fg42/devtools-on-script-failed-to-parse params)) - ("Console.messageAdded" (fg42/devtools-on-message-added params)) + ("Log.entryAdded" (fg42/devtools-log-added params)) + ;; ("Console.messageAdded" (fg42/devtools-on-message-added params)) ;; ;; TODO: do something usefull here, possibly great for REPL ("Console.messageRepeatCountUpdated") ;; nil -> These are return messages from RPC calls, not notification (_ (if method - (inspect-data-append data) + (message "FG42: Got a method - %s" method) (fg42/devtools-dispatch-callback (plist-get data :id) (plist-get data :result))))))) @@ -143,12 +135,16 @@ :method method :params params))))) +(defun fg42/devtools-on-error (socket where error) + (message "FG42: Got and error in %s" where) + (message error)) (defun fg42/devtools-open-socket (url) "Connect to the given URL and return a socket." (websocket-open url :on-open #'fg42/devtools-on-open :on-message #'fg42/devtools-on-message + :on-error #'fg42/devtools-on-error :on-close #'fg42/devtools-on-close)) @@ -203,8 +199,10 @@ (message (format "FG42: Connecting to %s" socket-url)) (setq fg42/devtools-socket (fg42/devtools-open-socket socket-url)) (message "Sending initial RPC calls...") - (fg42/devtools-call-rpc "Console.enable") + ;; (fg42/devtools-call-rpc "Console.enable") + (fg42/devtools-call-rpc "Log.enable") (fg42/devtools-call-rpc "Debugger.enable") + (fg42/devtools-call-rpc "Runtime.enable") (fg42/devtools-call-rpc "Network.setCacheDisabled" '(:cacheDisabled t)))) @@ -309,7 +307,7 @@ (fg42/devtools-connect)) ;; (fg42/devtools-debug-restart) +;; (fg42/devtools-disconnect) - -(provide 'fg42/devtools) -;;; devtools.el ends here +(provide 'fg42/devtools/core) +;;; core.el ends here diff --git a/lib/fg42/devtools/vars.el b/lib/fg42/devtools/vars.el new file mode 100644 index 0000000..5b4e4d8 --- /dev/null +++ b/lib/fg42/devtools/vars.el @@ -0,0 +1,58 @@ +;;; fg42-devtools --- Webkit devtool driver for FG42 +;; +;; Copyright (c) 2019 Sameer Rahmani +;; +;; Author: Sameer Rahmani +;; URL: https://gitlab.com/FG42/FG42 +;; Keywords: webkit +;; Version: 0.1.0 +;; +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . +;; +;;; Acknoledgement: +;; This library is heavily inspired by Kite mini library. Kudos Tung Dao +;; for his great work. +;; +;;; Commentary: +;;; Code: + +;;; Customs & Vars ------------------------------------------------------------ +(defcustom fg42/devtools-remote-host "127.0.0.1" + "Default host for connection to WebKit remote debugging API." + :group 'fg42/devtools) + + +(defcustom fg42/devtools-remote-port 9222 + "Default port for connection to WebKit remote debugging API." + :group 'fg42/devtools) + + +(defvar fg42/devtools-socket nil + "Websocket connection to WebKit remote debugging API.") + + +(defvar fg42/devtools-rpc-id 0) + + +(defvar fg42/devtools-rpc-callbacks nil) + + +(defvar fg42/devtools-rpc-scripts nil + "List of JavaScript files available for live editing.") + +(defvar fg42/devtools-console-buffer-name "*1-console*") +(defvar fg42/devtools-network-buffer-name "*2-network*") + +(provide 'fg42/devtools/vars) +;;; vars.el ends here diff --git a/lib/fg42/logger.el b/lib/fg42/logger.el new file mode 100644 index 0000000..e114b47 --- /dev/null +++ b/lib/fg42/logger.el @@ -0,0 +1,8 @@ +;;; logger --- logger library of FG42 +;;; Commentary: +;;; +;;; Code: + + +(provide 'fg42/logger) +;;; logger ends here diff --git a/lib/fg42/utils.el b/lib/fg42/utils.el index 299f30d..297dd93 100644 --- a/lib/fg42/utils.el +++ b/lib/fg42/utils.el @@ -23,7 +23,8 @@ with is the buffer." (let ((buf (get-buffer-create buffer-name))) (with-current-buffer buf (insert data) - (funcall fn buf)))) + (when fn + (funcall fn buf))))) (defun inspect-as-json-and-switch (data) @@ -60,5 +61,10 @@ with is the buffer." ";; END.\n"))) +(defun apply-face (face-symbol text) + "Apply the given FACE-SYMBOL to the given TEXT." + (put-text-property 0 (length text) 'face face-symbol text)) + + (provide 'fg42/utils) ;;; utils.el ends here diff --git a/lib/fg42/devtools/utils/json.el b/lib/fg42/utils/json.el similarity index 100% rename from lib/fg42/devtools/utils/json.el rename to lib/fg42/utils/json.el