From c7cd8a4be43b26e91ce7a27954f5300910657fe2 Mon Sep 17 00:00:00 2001
From: Rahul <skvrahul@gmail.com>
Date: Fri, 27 Mar 2020 17:18:27 +0530
Subject: [PATCH] [WIP] Adds error message feature

---
 autoload/flake8.vim | 40 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 38 insertions(+), 2 deletions(-)

diff --git a/autoload/flake8.vim b/autoload/flake8.vim
index cf592cf..157a717 100644
--- a/autoload/flake8.vim
+++ b/autoload/flake8.vim
@@ -20,6 +20,10 @@ function! flake8#Flake8UnplaceMarkers()
     call s:Warnings()
 endfunction
 
+function! flake8#ShowErrorMessage()
+    call s:ShowErrorMessage()
+endfunction
+
 "" }}}
 
 "" ** internal ** {{{
@@ -27,7 +31,7 @@ endfunction
 "" warnings 
 
 let s:displayed_warnings = 0
-function s:Warnings()
+function! s:Warnings()
   if !s:displayed_warnings
     let l:show_website_url = 0
 
@@ -101,6 +105,9 @@ function! s:Setup()  " {{{
     let s:markerdata['F'].marker = s:flake8_pyflake_marker
     let s:markerdata['C'].marker = s:flake8_complexity_marker
     let s:markerdata['N'].marker = s:flake8_naming_marker
+
+
+
 endfunction  " }}}
 
 "" do flake8
@@ -154,11 +161,18 @@ function! s:Flake8()  " {{{
     let &shellpipe=l:old_shellpipe
     let &t_ti=l:old_t_ti
     let &t_te=l:old_t_te
+    " store mapping of line number to error string
 
     " process results
+    let s:resultDict = {} 
+
     let l:results=getqflist()
     let l:has_results=results != []
     if l:has_results
+	" save line number of each error message	
+        for result in a:results:
+            s:resultDict[result.lnum] = result.text
+
         " markers
         if !s:flake8_show_in_gutter == 0 || !s:flake8_show_in_file == 0
             call s:PlaceMarkers(l:results)
@@ -185,7 +199,6 @@ function! s:Flake8()  " {{{
 endfunction  " }}}
 
 "" markers
-
 function! s:PlaceMarkers(results)  " {{{
     " in gutter?
     if !s:flake8_show_in_gutter == 0
@@ -253,6 +266,29 @@ function! s:UnplaceMarkers()  " {{{
     endfor
 endfunction  " }}}
 
+function! s:ShowErrorMessage()  " {{{
+    let l:cursorPos = getpos(".")
+    if !exists('s:resultDict')
+	return
+    endif
+
+    " if there is a message on the current line,
+    " then echo it 
+    if has_key(s:matchDict, s:cursorPos[1])
+	let l:errorText = get(s:matchDict, l:cursorPos[1]) 
+	echo strpart(l:errorText, 0, &columns-1)
+	let b:showing_message = 1
+    endif
+
+    " if a message is already being shown,
+    " then clear it
+    if !b:showing_message == 0
+	echo
+	let b:showing_message = 0
+    endif
+
+endfunction  " }}}
+
 "" }}}
 
 let &cpo = s:save_cpo
-- 
2.39.5