
    Je'!                         d Z ddlZddlmZ ddlmZmZ ddlm	Z	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZmZmZ dd	lm Z  d
Z! G d de       Z"y)z#
Text snippets configuration tabs.
    N)getsavefilenamegetopenfilename)QtSlot)
	QComboBox	QGroupBoxQGridLayoutQLabelQMessageBoxQPushButton
QTabWidgetQVBoxLayoutQWidgetQFileDialog)_)SNIPPETS)SnippetModelsProxySnippetTableSUPPORTED_LANGUAGES_PY
PYTHON_POS)SpyderPreferencesTabz4https://microsoft.github.io/language-server-protocolc                   X     e Zd Z ed      Z fdZd Zd Zd Zd Z	d Z
d Zd	 Z xZS )
SnippetsConfigTabSnippetsc                 H	   t         |   |       d| _        dj                  t        t        d            }t        t        d      j                  |            }|j                  d       |j                  d       |j                  t        j                         t        |       | _        | j                  j                  t        d             | j                  j                  t                | j                  j#                  t$               | j                  j&                  j)                  | j*                         t-        t        d            }t/               }|j1                  | j                         |j3                  |       t5        |       | _        t9        | | j6                  | j                        | _        | j:                  j=                  d	       t-        t        d
            }t/               }|j1                  | j:                         |j3                  |       t?        t        d            | _         t?        t        d            | _!        t?        t        d            | _"        | jD                  jG                  d       t?        t        d            | _$        t?        t        d            | _%        | jB                  jL                  j)                  | jN                         | j@                  jL                  j)                  | jP                         | jD                  jL                  j)                  | jR                         | jH                  jL                  j)                  | jT                         | jJ                  jL                  j)                  | jV                         | jB                  | jD                  | j@                  | jH                  | jJ                  g}tY               }	t[        |      D ]  \  }
}|	j1                  ||
d        |	j]                  dd       |	j]                  dd       |	j]                  dd       t/               }|j1                  |       |j1                  |       |j1                  |       |j_                  |	       | j3                  |       y )NpythonzI<a href="{0}/specifications/specification-current#snippet_syntax">{1}</a>zthe LSP grammarzSpyder allows to define custom completion snippets to use in addition to the ones offered by the Language Server Protocol (LSP). Each snippet should follow {}.<br><br> <b>Note:</b> All changes will be effective only when applying the settingsTz/Programming language provided by the LSP serverLanguage)language   zAvailable snippetszReset to default valueszCreate a new snippetz!Delete currently selected snippetFzExport snippets to JSONzImport snippets from JSON   r      )0super__init__snippets_languageformatLSP_URLr   r
   setOpenExternalLinkssetWordWrapsetAlignmentr   AlignJustifyr   snippets_language_cb
setToolTipaddItemsr   setCurrentIndexr   currentTextChangedconnectchange_language_snippetsr   r   	addWidget	setLayoutr   snippets_proxyr   snippets_tablesetMaximumHeightr   reset_snippets_btnnew_snippet_btndelete_snippet_btn
setEnabledexport_snippets_btnimport_snippets_btnclickedcreate_new_snippetreset_default_snippetsdelete_snippetexport_snippetsimport_snippetsr	   	enumeratesetColumnStretch	addLayout)selfparentgrammar_urlsnippets_info_labelsnippet_lang_groupsnippet_lang_layoutsnippet_table_groupsnippet_table_layoutbtnssn_buttons_layoutibtnsnippets_layout	__class__s                W/usr/lib/python3/dist-packages/spyder/plugins/completion/providers/snippets/conftabs.pyr#   zSnippetsConfigTab.__init__#   s    !)fWa(9&:; 	 %   %f[13 	006''-((9$-dO!!!,,?@	B!!**+AB!!11*=!!44<<))	+ 'q}5)m%%d&?&?@$$%8906*$%%0F0FH,,S1'*>(?@*}&&t':':;%%&:; #.a0I.J"K*1-C+DE"-12#4**51#.q1J/K#L #.q1L/M#N  	$$,,T-D-DE''//0K0KL''//0C0CD  ((001E1EF  ((001E1EF $$''''((((	*
 (Mo 	3FAs''Q2	3**1a0**1a0**1a0 &-!!"56!!"45!!"56!!"34'    c                 <    | j                   j                  d       y )NT)new_snippet)r5   show_editorrF   s    rT   r>   z$SnippetsConfigTab.create_new_snippetp   s    ''D'9rU   c                     | j                   j                         j                         }| j                   j                  |       | j	                  d       | j
                  j                  d       y )NTF)r5   currentIndexrowr@   set_modifiedr9   r:   )rF   idxs     rT   r@   z SnippetsConfigTab.delete_snippets   sU    !!..0446**3/$**51rU   c                 P   | j                   j                         }t        j                  t	        j
                  |j                         i             }| j                  j                  |j                         |       | j                  j                          | j                  d       y )NT)r+   currentTextcopydeepcopyr   getlowerr4   reload_modelr5   reset_plainr]   )rF   r   default_snippets_langs      rT   r?   z(SnippetsConfigTab.reset_default_snippetsy   s{    ,,88: $LL)2.!0((NN3	5'')$rU   c                 :    | j                   j                  |       y N)r5   update_language_model)rF   r   s     rT   r1   z*SnippetsConfigTab.change_language_snippets   s    11(;rU   c                     t        | t        d      dddt        j                        \  }}|r1t	        j
                  |      }| j                  j                  |       y y )NzSave snippetszspyder_snippets.jsonJSON (*.json) filtersselectedfilteroptions)r   r   r   HideNameFilterDetailsospnormpathr4   rA   )rF   filename
_selfilters      rT   rA   z!SnippetsConfigTab.export_snippets   sY    .!O$"#55 7* ||H-H//9 rU   c           	         t        | t        d      ddt        j                        \  }}|rt	        j
                  |      }| j                  j                  |      \  }}}d}t        |      dk(  rIt        j                  | t        d      t        d      j                  |      t        j                         n4d	|v rMd
}t        j                  | t        d      t        d      j                  |d	         t        j                         nd|v rMd
}t        j                  | t        d      t        d      j                  |d         t        j                         nd|v r|d   }g }|D ](  }	||	   }
|j                  dj                  |	|
             * dj                  |      }t        j                   | t        d      t        d      j                  |||      t        j                         | j#                  |       y y )NzLoad snippetsrl   rm   rn   Tr   zAll snippets importedz%{0} snippets were loaded successfullyloadingFzJSON malformedzKThere was an error when trying to load the provided JSON file: <tt>{0}</tt>
validationzInvalid snippet filezThe provided snippet file does not comply with the Spyder JSON snippets spec and therefore it cannot be loaded.<br><br><tt>{}</tt>syntaxz<b>{0}</b>: {1}z<br>zIncorrect snippet formatzzSpyder was able to load {0}/{1} snippets correctly, please check the following snippets for any syntax errors: <br><br>{2})r   r   r   rr   rs   rt   r4   rB   lenr   informationr%   Okcriticalappendjoinwarningr]   )rF   ru   _sfvalidtotalerrorsmodifiedsyntax_errorsmsg
syntax_key
syntax_errerr_msgs               rT   rB   z!SnippetsConfigTab.import_snippets   s   'o#55
# ||H-H#'#6#6#F#F$ E5&H6{a''-.=>EEeLNN	$ &$H((*+ = >>Df$Y/?1# "V+$H((01 A BBH&$\2C4# '$*8$4MC&3 5
%2:%>


#4#;#;&
$4 55 %kk#.G''45 ( ) *0ug)F# h'g rU   c                 6    | j                   j                         S ri   )r4   save_snippetsrY   s    rT   apply_settingsz SnippetsConfigTab.apply_settings   s    ""0022rU   )__name__
__module____qualname__r   TITLEr#   r>   r@   r?   r1   rA   rB   r   __classcell__)rS   s   @rT   r   r       s7    jMEK(Z:2 <
:<(|3rU   r   )#__doc__ra   os.pathpathrs   qtpy.compatr   r   qtpy.QtCorer   r   qtpy.QtWidgetsr   r   r	   r
   r   r   r   r   r   r   spyder.config.baser   spyder.config.snippetsr   4spyder.plugins.completion.providers.snippets.widgetsr   r   r   r   spyder.api.preferencesr   r&   r    rU   rT   <module>r      sT   
   9  2 2 2
 ! +J J 7
@p3, p3rU   