Skip to content

Commit d30bd09

Browse files
committed
feat: add result font lock
1 parent 1df681c commit d30bd09

File tree

2 files changed

+40
-28
lines changed

2 files changed

+40
-28
lines changed

Diff for: ChangeLog

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- remove hardcode constants
66
- add `leetcode-solution-mode`, provide more keybindings
77
- add `leetcode-focus` option to avoid messy windows
8+
- add result font lock
89

910
2022-02-06 Wang Kai <[email protected]>
1011

Diff for: leetcode.el

+39-28
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,16 @@ python3, ruby, rust, scala, swift, mysql, mssql, oraclesql.")
223223
"Face for hard problems."
224224
:group 'leetcode)
225225

226+
(defface leetcode-accepted-face
227+
'((t (:foreground "#228b22")))
228+
"Face for submission accepted."
229+
:group 'leetcode)
230+
231+
(defface leetcode-error-face
232+
'((t (:foreground "#dc143c")))
233+
"Face for submission compile error, runtime error and TLE."
234+
:group 'leetcode)
235+
226236
;;; Login
227237
;; URL
228238
(defconst leetcode--domain "leetcode.com")
@@ -321,20 +331,17 @@ Such as 'Two Sum' will be converted to 'two-sum'. 'Pow(x, n)' will be 'powx-n'"
321331
(hard-tag "hard"))
322332
(cond
323333
((eq 1 difficulty)
324-
(prog1 easy-tag
325-
(put-text-property
326-
0 (length easy-tag)
327-
'font-lock-face 'leetcode-easy-face easy-tag)))
334+
(leetcode--add-font-lock easy-tag 'leetcode-easy-face))
328335
((eq 2 difficulty)
329-
(prog1 medium-tag
330-
(put-text-property
331-
0 (length medium-tag)
332-
'font-lock-face 'leetcode-medium-face medium-tag)))
336+
(leetcode--add-font-lock medium-tag 'leetcode-medium-face))
333337
((eq 3 difficulty)
334-
(prog1 hard-tag
335-
(put-text-property
336-
0 (length hard-tag)
337-
'font-lock-face 'leetcode-hard-face hard-tag))))))
338+
(leetcode--add-font-lock hard-tag 'leetcode-hard-face)))))
339+
340+
(defun leetcode--add-font-lock (str face)
341+
(prog1 str
342+
(put-text-property
343+
0 (length str)
344+
'font-lock-face face str)))
338345

339346
(defun leetcode--detail-buffer-name (problem-id)
340347
"Detail buffer name."
@@ -588,10 +595,7 @@ Return a list of rows, each row is a vector:
588595
(vector
589596
;; status
590597
(if (equal (leetcode-problem-status p) "ac")
591-
(prog1 leetcode--checkmark
592-
(put-text-property
593-
0 (length leetcode--checkmark)
594-
'font-lock-face 'leetcode-checkmark-face leetcode--checkmark))
598+
(leetcode--add-font-lock leetcode--checkmark 'leetcode-checkmark-face)
595599
" ")
596600
;; id
597601
(number-to-string (leetcode-problem-id p))
@@ -600,10 +604,7 @@ Return a list of rows, each row is a vector:
600604
(leetcode-problem-title p)
601605
" "
602606
(if (eq (leetcode-problem-paid-only p) t)
603-
(prog1 leetcode--paid
604-
(put-text-property
605-
0 (length leetcode--paid)
606-
'font-lock-face 'leetcode-paid-face leetcode--paid))
607+
(leetcode--add-font-lock leetcode--paid 'leetcode-paid-face)
607608
" "))
608609
;; acceptance
609610
(leetcode-problem-acceptance p)
@@ -848,11 +849,11 @@ LeetCode require slug-title as the request parameters."
848849
((eq .status_code 14)
849850
(insert .status_msg))
850851
((eq .status_code 15)
851-
(insert .status_msg)
852+
(insert (leetcode--add-font-lock .status_msg 'leetcode-error-face))
852853
(insert "\n\n")
853854
(insert .full_runtime_error))
854855
((eq .status_code 20)
855-
(insert .status_msg)
856+
(insert (leetcode--add-font-lock .status_msg 'leetcode-error-face))
856857
(insert "\n\n")
857858
(insert .full_compile_error)))
858859
(when (> (length .code_output) 0)
@@ -944,28 +945,38 @@ STATUS_CODE has following possible value:
944945
(let-alist submission-detail
945946
(with-current-buffer (get-buffer-create (leetcode--result-buffer-name problem-id))
946947
(erase-buffer)
947-
(insert (format "Status: %s" .status_msg))
948+
(font-lock-mode +1)
948949
(cond
949950
((eq .status_code 10)
950-
(insert (format " (%s/%s)\n\n" .total_correct .total_testcases))
951+
(insert (format "Status: %s\n\n"
952+
(leetcode--add-font-lock
953+
(format "%s (%s/%s)" .status_msg .total_correct .total_testcases)
954+
'leetcode-accepted-face)))
951955
(insert (format "Runtime: %s, faster than %.2f%% of %s submissions.\n\n"
952956
.status_runtime .runtime_percentile .pretty_lang))
953957
(insert (format "Memory Usage: %s, less than %.2f%% of %s submissions."
954958
.status_memory .memory_percentile .pretty_lang)))
955959
((eq .status_code 11)
956-
(insert (format " (%s/%s)\n\n" .total_correct .total_testcases))
960+
(insert (format "Status: %s\n\n"
961+
(leetcode--add-font-lock
962+
(format "%s (%s/%s)" .status_msg .total_correct .total_testcases)
963+
'leetcode-error-face)))
957964
(insert (format "Test Case: \n%s\n\n" .input))
958965
(insert (format "Answer: %s\n\n" .code_output))
959966
(insert (format "Expected Answer: %s\n\n" .expected_output))
960-
(insert (format "Stdout: \n%s\n" .std_output)))
967+
(unless (string-empty-p .std_output)
968+
(insert (format "Stdout: \n%s\n" .std_output))))
961969
((eq .status_code 14)
970+
(insert (format "Status: %s" (leetcode--add-font-lock .status_msg 'leetcode-error-face)))
962971
(insert "\n"))
963972
((eq .status_code 15)
973+
(insert (format "Status: %s" (leetcode--add-font-lock .status_msg 'leetcode-error-face)))
964974
(insert "\n\n")
965-
(insert (format (alist-get 'full_runtime_error submission-detail))))
975+
(insert (format .full_runtime_error)))
966976
((eq .status_code 20)
977+
(insert (format "Status: %s" (leetcode--add-font-lock .status_msg 'leetcode-error-face)))
967978
(insert "\n\n")
968-
(insert (format (alist-get 'full_compile_error submission-detail)))))
979+
(insert (format .full_compile_error))))
969980
(display-buffer (current-buffer)
970981
'((display-buffer-reuse-window
971982
leetcode--display-result)

0 commit comments

Comments
 (0)