
    G@d'!                         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"dS )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                   ^     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                 	   t                                          |           d| _        d                    t          t          d                    }t          t          d                              |                    }|                    d           |                    d           |	                    t          j                   t          |           | _        | j                            t          d                     | j                            t                      | j                            t$                     | j        j                            | j                   t-          t          d                    }t/                      }|                    | j                   |                    |           t5          |           | _        t9          | | j        | j                  | _        | j                            d	           t-          t          d
                    }t/                      }|                    | j                   |                    |           t?          t          d                    | _         t?          t          d                    | _!        t?          t          d                    | _"        | j"        #                    d           t?          t          d                    | _$        t?          t          d                    | _%        | j!        j&                            | j'                   | j         j&                            | j(                   | j"        j&                            | j)                   | j$        j&                            | j*                   | j%        j&                            | j+                   | j!        | j"        | j         | j$        | j%        g}tY                      }	t[          |          D ]\  }
}|	                    ||
d           |	.                    dd           |	.                    dd           |	.                    dd           t/                      }|                    |           |                    |           |                    |           |/                    |	           |                     |           d S )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                Ulib/python3.11/site-packages/spyder/plugins/completion/providers/snippets/conftabs.pyr#   zSnippetsConfigTab.__init__#   sx      !)fWa(9&:&:;; 	 %    %f[113 3 	00666''---((999$-dOO!!,,?@@	B 	B 	B!**+ABBB!11*===!4<<)	+ 	+ 	+ 'q}}55)mm%%d&?@@@$$%8999066*$%0FH H H,,S111'*>(?(?@@*}}&&t':;;;%%&:;;; #.a0I.J.J"K"K*1-C+D+DEE"-122#4 #4**5111#.q1J/K/K#L#L #.q1L/M/M#N#N  	$,,T-DEEE'//0KLLL'//0CDDD (001EFFF (001EFFF $''((	*
 (MMoo 	3 	3FAs''Q2222**1a000**1a000**1a000 &--!!"5666!!"4555!!"5666!!"3444'''''    c                 <    | j                             d           d S )NT)new_snippet)r5   show_editorrF   s    rT   r>   z$SnippetsConfigTab.create_new_snippetp   s"    ''D'99999rU   c                     | j                                                                         }| j                             |           |                     d           | j                            d           d S )NTF)r5   currentIndexrowr@   set_modifiedr9   r:   )rF   idxs     rT   r@   z SnippetsConfigTab.delete_snippets   sj    !..004466**3///$**511111rU   c                 `   | j                                         }t          j        t	          j        |                                i                     }| j                            |                                |           | j	        
                                 |                     d           d S )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:: $L))2..!0 !0((NN3	5 	5 	5'')))$rU   c                 :    | j                             |           d S 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                  \  }}|r0t	          j        |          }| j                            |           d S d S )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   sw    .!O$$"#5 7  7  7*  	:|H--H//99999	: 	:rU   c           	         t          | t          d          ddt          j                  \  }}|rt	          j        |          }| j                            |          \  }}}d}t          |          dk    rPt          j
        | t          d          t          d                              |          t          j                   n`d	|v rXd
}t          j        | t          d          t          d                              |d	                   t          j                   nd|v rWd
}t          j        | t          d          t          d                              |d                   t          j                   nd|v r|d         }g }|D ]3}	||	         }
|                    d                    |	|
                     4d                    |          }t          j        | t          d          t          d                              |||          t          j                   |                     |           d S d S )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
 
 
#  3	(|H--H#'#6#F#F$ $ E5&H6{{a'-..=>>EEeLLN	$ $ $ $ &&$H(*++ = > >>Df$Y/?1 ?1#    "V++$H(011 A B BBH&$\2C4 C4#    ''$*8$4MC&3 5 5
%2:%>


#4#;#;&
$4 $4 5 5 5 5$kk#..G'455 ( ) ) *0ug)F)F#   h'''''g3	( 3	(rU   c                 4    | j                                         S ri   )r4   save_snippetsrY   s    rT   apply_settingsz SnippetsConfigTab.apply_settings   s    "00222rU   )__name__
__module____qualname__r   TITLEr#   r>   r@   r?   r1   rA   rB   r   __classcell__)rS   s   @rT   r   r       s        AjMMEK( K( K( K( K(Z: : :2 2 2     < < <
: 
: 
:<( <( <(|3 3 3 3 3 3 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      s   
        9 8 8 8 8 8 8 8                2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 !           + + + + + +J J J J J J J J J J J J 7 7 7 7 7 7
@p3 p3 p3 p3 p3, p3 p3 p3 p3 p3rU   