summaryrefslogtreecommitdiff
path: root/support/texlab
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-02-26 03:02:12 +0000
committerNorbert Preining <norbert@preining.info>2023-02-26 03:02:12 +0000
commite7ae872926eddb0de09ecfe1c578e0680033955a (patch)
tree01717465b5b26d3b2ccaea9889c720a840e0a16c /support/texlab
parent81a9d839224eef4c2bd9bf68410b4049c61cdb14 (diff)
CTAN sync 202302260302
Diffstat (limited to 'support/texlab')
-rw-r--r--support/texlab/CHANGELOG.md14
-rw-r--r--support/texlab/Cargo.lock36
-rw-r--r--support/texlab/Cargo.toml19
-rw-r--r--support/texlab/src/db/analysis.rs2
-rw-r--r--support/texlab/src/db/diagnostics.rs27
-rw-r--r--support/texlab/src/db/discovery.rs4
-rw-r--r--support/texlab/src/db/document.rs10
-rw-r--r--support/texlab/src/db/workspace.rs2
-rw-r--r--support/texlab/src/distro/kpsewhich.rs4
-rw-r--r--support/texlab/src/distro/miktex.rs2
-rw-r--r--support/texlab/src/features/completion/builder.rs12
-rw-r--r--support/texlab/src/features/completion/include.rs2
-rw-r--r--support/texlab/src/features/folding.rs1
-rw-r--r--support/texlab/src/features/forward_search.rs15
-rw-r--r--support/texlab/src/features/symbol.rs7
-rw-r--r--support/texlab/src/features/symbol/types.rs24
-rw-r--r--support/texlab/src/lib.rs7
-rw-r--r--support/texlab/src/options.rs15
-rw-r--r--support/texlab/src/parser/build_log.rs10
-rw-r--r--support/texlab/src/server.rs22
-rw-r--r--support/texlab/src/tests/client.rs159
-rw-r--r--support/texlab/src/tests/fixture.rs126
-rw-r--r--support/texlab/src/tests/issues.rs12
-rw-r--r--support/texlab/src/tests/snapshots/texlab__tests__issues__issue_707.snap45
-rw-r--r--support/texlab/src/tests/text_document/completion.rs834
-rw-r--r--support/texlab/src/tests/text_document/definition.rs140
-rw-r--r--support/texlab/src/tests/text_document/did_change_configuration.rs37
-rw-r--r--support/texlab/src/tests/text_document/document_highlight.rs60
-rw-r--r--support/texlab/src/tests/text_document/document_link.rs71
-rw-r--r--support/texlab/src/tests/text_document/document_symbol.rs408
-rw-r--r--support/texlab/src/tests/text_document/folding_range.rs96
-rw-r--r--support/texlab/src/tests/text_document/formatting.rs132
-rw-r--r--support/texlab/src/tests/text_document/hover.rs303
-rw-r--r--support/texlab/src/tests/text_document/inlay_hint.rs65
-rw-r--r--support/texlab/src/tests/text_document/references.rs271
-rw-r--r--support/texlab/src/tests/text_document/rename.rs110
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_package_ref.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_empty.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_open_brace.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_simple.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_empty.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_open_brace.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_word.snap17
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__begin_environment_without_snippet_support.snap62
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation.snap31
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_acronym.snap18
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_open_brace.snap18
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_open_brace_multiple.snap18
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_open_brace.snap56
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_set_open_brace.snap56
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_set_simple.snap56
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_simple.snap56
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_open_brace.snap56
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_simple.snap56
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_word.snap56
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_bibtex.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_simple.snap63
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_simple_package.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_class.snap17
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_command_definition.snap17
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_simple.snap17
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_simple_end.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_after_preamble.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_after_string.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_at_empty.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_article.snap17
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_preamble.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_string.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_complete_entry.snap17
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_empty_entry_closed.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_empty_entry_open.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_field_name.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_two_fields_name_closed.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_two_fields_name_open.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__glossary_ref_open_brace.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__glossary_ref_simple.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_class_closed_brace.snap66
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_class_open_brace.snap66
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_package_closed_brace.snap66
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_package_open_brace.snap66
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__label.snap67
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_import.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_texlabroot.snap61
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__theorem_begin.snap17
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__theorem_end.snap17
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__tikz_library_closed_brace.snap56
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__tikz_library_open_brace.snap56
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__user_command.snap17
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__user_environment.snap28
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__did_change_configuration__invalid_configuration.snap9
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__float_flat.snap60
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_command.snap8
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_insert_braces.snap7
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_join_strings.snap8
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_multiple_entries.snap16
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_parens.snap7
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_preamble.snap6
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_string.snap6
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_trailing_comma.snap8
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_wrap_long_lines.snap10
-rw-r--r--support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__inlay_hint__label_definition.snap38
-rw-r--r--support/texlab/src/tests/workspace/symbol.rs142
-rw-r--r--support/texlab/src/util.rs3
-rw-r--r--support/texlab/src/util/chktex.rs2
-rw-r--r--support/texlab/src/util/label.rs2
-rw-r--r--support/texlab/src/util/regex_filter.rs24
-rw-r--r--support/texlab/tests/lsp/fixture.rs249
-rw-r--r--support/texlab/tests/lsp/main.rs3
-rw-r--r--support/texlab/tests/lsp/text_document.rs (renamed from support/texlab/src/tests/text_document.rs)1
-rw-r--r--support/texlab/tests/lsp/text_document/completion.rs821
-rw-r--r--support/texlab/tests/lsp/text_document/definition.rs156
-rw-r--r--support/texlab/tests/lsp/text_document/document_highlight.rs51
-rw-r--r--support/texlab/tests/lsp/text_document/document_link.rs52
-rw-r--r--support/texlab/tests/lsp/text_document/document_symbol.rs441
-rw-r--r--support/texlab/tests/lsp/text_document/folding_range.rs66
-rw-r--r--support/texlab/tests/lsp/text_document/formatting.rs134
-rw-r--r--support/texlab/tests/lsp/text_document/hover.rs246
-rw-r--r--support/texlab/tests/lsp/text_document/inlay_hint.rs57
-rw-r--r--support/texlab/tests/lsp/text_document/references.rs270
-rw-r--r--support/texlab/tests/lsp/text_document/rename.rs106
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap31
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap16
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap11
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap11
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap11
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap31
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap31
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap31
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap11
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap11
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap11
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap31
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap10
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap36
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap31
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap31
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap11
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap11
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap26
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap11
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap16
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap19
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap19
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_flat.snap (renamed from support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__enumerate_flat.snap)18
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_nested.snap (renamed from support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__enumerate_nested.snap)8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_flat.snap (renamed from support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__equation_flat.snap)12
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_nested.snap (renamed from support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__equation_nested.snap)6
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_flat.snap60
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_nested.snap (renamed from support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__float_nested.snap)6
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__ignored_patterns.snap24
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_flat.snap (renamed from support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__section_flat.snap)12
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_nested.snap (renamed from support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__section_nested.snap)6
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_flat.snap (renamed from support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__theorem_flat.snap)16
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_nested.snap (renamed from support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__theorem_nested.snap)8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__bibtex.snap27
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__latex.snap41
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap7
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap7
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap7
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap15
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap6
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap5
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap5
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap7
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap9
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_cite.snap8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_entry.snap8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__component_known_package.snap8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__entry_type_known_type.snap8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__field_known.snap8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file.snap8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file_mumber.snap8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__section.snap8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__string_inside_reference.snap8
-rw-r--r--support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap38
-rw-r--r--support/texlab/tests/lsp/workspace.rs (renamed from support/texlab/src/tests/workspace.rs)0
-rw-r--r--support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_bibtex.snap (renamed from support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_bibtex.snap)20
-rw-r--r--support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_figure.snap (renamed from support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_figure.snap)12
-rw-r--r--support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_item.snap (renamed from support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_item.snap)28
-rw-r--r--support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_math.snap (renamed from support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_math.snap)20
-rw-r--r--support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_section.snap (renamed from support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_section.snap)36
-rw-r--r--support/texlab/tests/lsp/workspace/symbol.rs124
-rw-r--r--support/texlab/texlab.14
-rw-r--r--support/texlab/texlab.pdfbin26613 -> 26587 bytes
216 files changed, 4484 insertions, 5572 deletions
diff --git a/support/texlab/CHANGELOG.md b/support/texlab/CHANGELOG.md
index 7e2b02dd02..c2f8560a64 100644
--- a/support/texlab/CHANGELOG.md
+++ b/support/texlab/CHANGELOG.md
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [5.3.0] - 2023-02-25
+
+### Added
+
+- Allow filtering `textDocument/documentSymbols` using regular expressions specified via
+ `texlab.symbols.allowedPatterns` and `texlab.symbols.ignoredPatterns`
+ ([#851](https://github.com/latex-lsp/texlab/issues/851))
+
+### Fixed
+
+- Do not use percent-encoded path when searching for PDF files during forward search
+ ([#848](https://github.com/latex-lsp/texlab/issues/848))
+- Always return an empty list of code actions instead of returning "method not found" ([#850](https://github.com/latex-lsp/texlab/issues/850))
+
## [5.2.0] - 2023-01-29
### Added
diff --git a/support/texlab/Cargo.lock b/support/texlab/Cargo.lock
index 1b9986b4ad..69c810d702 100644
--- a/support/texlab/Cargo.lock
+++ b/support/texlab/Cargo.lock
@@ -45,9 +45,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.68"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
+checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
[[package]]
name = "arc-swap"
@@ -187,9 +187,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.1.4"
+version = "4.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76"
+checksum = "ec0b0588d44d4d63a87dbd75c136c166bbfd9a86a31cb89e09906521c7d3f5e3"
dependencies = [
"bitflags",
"clap_derive",
@@ -437,9 +437,9 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
[[package]]
name = "encoding_rs"
-version = "0.8.31"
+version = "0.8.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
dependencies = [
"cfg-if",
]
@@ -753,9 +753,9 @@ dependencies = [
[[package]]
name = "insta"
-version = "1.26.0"
+version = "1.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6f0f08b46e4379744de2ab67aa8f7de3ffd1da3e275adc41fcc82053ede46ff"
+checksum = "fea5b3894afe466b4bcf0388630fc15e11938a6074af0cd637c825ba2ec8a099"
dependencies = [
"console",
"globset",
@@ -946,9 +946,9 @@ dependencies = [
[[package]]
name = "lsp-types"
-version = "0.93.2"
+version = "0.94.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9be6e9c7e2d18f651974370d7aff703f9513e0df6e464fd795660edc77e6ca51"
+checksum = "0b63735a13a1f9cd4f4835223d828ed9c2e35c8c5e61837774399f558b6a1237"
dependencies = [
"bitflags",
"serde",
@@ -1060,9 +1060,9 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.17.0"
+version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
[[package]]
name = "oorandom"
@@ -1472,9 +1472,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.91"
+version = "1.0.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
+checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76"
dependencies = [
"itoa",
"ryu",
@@ -1551,9 +1551,9 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
[[package]]
name = "smol_str"
-version = "0.1.23"
+version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7475118a28b7e3a2e157ce0131ba8c5526ea96e90ee601d9f6bb2e286a35ab44"
+checksum = "fad6c857cbab2627dcf01ec85a623ca4e7dcb5691cbaa3d7fb7653671f0d09c9"
dependencies = [
"serde",
]
@@ -1631,12 +1631,12 @@ dependencies = [
[[package]]
name = "texlab"
-version = "5.2.0"
+version = "5.3.0"
dependencies = [
"anyhow",
"assert_unordered",
"chrono",
- "clap 4.1.4",
+ "clap 4.1.6",
"criterion",
"crossbeam-channel",
"dashmap",
diff --git a/support/texlab/Cargo.toml b/support/texlab/Cargo.toml
index 9f5d0e570f..ede163972d 100644
--- a/support/texlab/Cargo.toml
+++ b/support/texlab/Cargo.toml
@@ -1,7 +1,7 @@
[package]
name = "texlab"
description = "LaTeX Language Server"
-version = "5.2.0"
+version = "5.3.0"
license = "GPL-3.0"
readme = "README.md"
authors = [
@@ -34,13 +34,13 @@ test = false
doctest = false
[dependencies]
-anyhow = "1.0.68"
+anyhow = "1.0.69"
chrono = { version = "0.4.23", default-features = false, features = ["std"] }
-clap = { version = "4.1.4", features = ["derive"] }
+clap = { version = "4.1.6", features = ["derive"] }
crossbeam-channel = "0.5.6"
dashmap = "5.4.0"
dirs = "4.0.0"
-encoding_rs = "0.8.31"
+encoding_rs = "0.8.32"
encoding_rs_io = "0.1.7"
fern = "0.6.1"
flate2 = "1.0.25"
@@ -52,18 +52,18 @@ itertools = "0.10.5"
log = "0.4.17"
logos = "0.12.1"
lsp-server = "0.7.0"
-lsp-types = { version = "0.93.2", features = ["proposed"] }
+lsp-types = "0.94.0"
notify = "5.1.0"
-once_cell = "1.17.0"
+once_cell = "1.17.1"
regex = "1.7.1"
rowan = "0.15.10"
rustc-hash = "1.1.0"
serde = "1.0.152"
-serde_json = "1.0.91"
+serde_json = "1.0.93"
serde_millis = "0.1.1"
serde_regex = "1.1.0"
serde_repr = "0.1.10"
-smol_str = { version = "0.1.23", features = ["serde"] }
+smol_str = { version = "0.1.24", features = ["serde"] }
strum = { version = "0.24.1", features = ["derive"] }
tempfile = "3.3.0"
thiserror = "1.0.38"
@@ -80,7 +80,7 @@ package = "salsa-2022"
assert_unordered = "0.3.5"
criterion = { version = "0.4.0" }
env_logger = "0.10.0"
-insta = { version = "1.26.0", features = ["glob", "redactions", "json"] }
+insta = { version = "1.28.0", features = ["glob", "redactions", "json"] }
jod-thread = "0.1.2"
[profile.release]
@@ -89,6 +89,7 @@ incremental = true
[profile.bench]
lto = "thin"
+incremental = true
[[bench]]
name = "bench_main"
diff --git a/support/texlab/src/db/analysis.rs b/support/texlab/src/db/analysis.rs
index 79e81c963c..13b5bb1cb3 100644
--- a/support/texlab/src/db/analysis.rs
+++ b/support/texlab/src/db/analysis.rs
@@ -45,7 +45,7 @@ impl TexLink {
let import = latex::Import::cast(node)?;
let mut base_dir = import.directory()?.key()?.to_string();
- if !base_dir.ends_with("/") {
+ if !base_dir.ends_with('/') {
base_dir.push('/');
}
diff --git a/support/texlab/src/db/diagnostics.rs b/support/texlab/src/db/diagnostics.rs
index 81ed24fd2e..8abb856768 100644
--- a/support/texlab/src/db/diagnostics.rs
+++ b/support/texlab/src/db/diagnostics.rs
@@ -5,7 +5,7 @@ pub mod tex;
use lsp_types::{DiagnosticSeverity, NumberOrString, Range};
use rustc_hash::FxHashMap;
-use crate::{db::workspace::Workspace, Db};
+use crate::{db::workspace::Workspace, util, Db};
use super::document::{Document, Language};
@@ -139,24 +139,13 @@ pub fn collect_filtered(
}
if let Some(diagnostics) = all_diagnostics.get(document) {
- for diagnostic in diagnostics.iter() {
- if !options.allowed_patterns.is_empty()
- && !options
- .allowed_patterns
- .iter()
- .any(|pattern| pattern.0.is_match(&diagnostic.message))
- {
- continue;
- }
-
- if options
- .ignored_patterns
- .iter()
- .any(|pattern| pattern.0.is_match(&diagnostic.message))
- {
- continue;
- }
-
+ for diagnostic in diagnostics.iter().filter(|diag| {
+ util::regex_filter::filter(
+ &diag.message,
+ &options.allowed_patterns,
+ &options.ignored_patterns,
+ )
+ }) {
let source = match diagnostic.code {
DiagnosticCode::Tex(_) | DiagnosticCode::Bib(_) => "texlab",
DiagnosticCode::Log(_) => "latex-build",
diff --git a/support/texlab/src/db/discovery.rs b/support/texlab/src/db/discovery.rs
index 5986fcd888..12338f745e 100644
--- a/support/texlab/src/db/discovery.rs
+++ b/support/texlab/src/db/discovery.rs
@@ -110,12 +110,12 @@ pub fn source_dependency(
.as_deref()
.map_or(false, |dir| path.starts_with(dir))
})
- .flat_map(|path| Url::from_file_path(path))
+ .flat_map(Url::from_file_path)
.map(|uri| Location::new(db, uri));
for location in file_names
.iter()
- .filter_map(|file_name| base_dir.join(db, &file_name))
+ .filter_map(|file_name| base_dir.join(db, file_name))
.chain(distro_files)
{
match workspace.lookup(db, location) {
diff --git a/support/texlab/src/db/document.rs b/support/texlab/src/db/document.rs
index 1fc7d6880c..81ed22e916 100644
--- a/support/texlab/src/db/document.rs
+++ b/support/texlab/src/db/document.rs
@@ -36,10 +36,10 @@ impl Location {
}
}
- pub fn stem<'db>(self, db: &'db dyn Db) -> Option<&'db str> {
- let name = self.uri(db).path_segments()?.last()?;
- let stem = name.rsplit_once('.').map_or(name, |(stem, _)| stem);
- Some(stem)
+ pub fn stem(self, db: &dyn Db) -> Option<String> {
+ let path = self.uri(db).to_file_path().ok()?;
+ let stem = path.file_stem()?.to_str()?;
+ Some(String::from(stem))
}
pub fn join(self, db: &dyn Db, path: &str) -> Option<Location> {
@@ -126,7 +126,7 @@ pub struct Document {
impl Document {
pub fn edit(self, db: &mut dyn Db, range: TextRange, replace_with: &str) {
let mut text = self.contents(db).set_text(db).to(String::new());
- text.replace_range(std::ops::Range::<usize>::from(range), &replace_with);
+ text.replace_range(std::ops::Range::<usize>::from(range), replace_with);
self.contents(db).set_text(db).to(text);
self.set_cursor(db).to(range.start());
}
diff --git a/support/texlab/src/db/workspace.rs b/support/texlab/src/db/workspace.rs
index 8b4d755b09..123d415fd9 100644
--- a/support/texlab/src/db/workspace.rs
+++ b/support/texlab/src/db/workspace.rs
@@ -190,7 +190,7 @@ impl Workspace {
.unwrap_or(".")
.to_string();
- if !path.ends_with("/") {
+ if !path.ends_with('/') {
path.push('/');
}
diff --git a/support/texlab/src/distro/kpsewhich.rs b/support/texlab/src/distro/kpsewhich.rs
index 0a6d1d35ad..24f4a3531a 100644
--- a/support/texlab/src/distro/kpsewhich.rs
+++ b/support/texlab/src/distro/kpsewhich.rs
@@ -3,9 +3,9 @@ use std::{env, ffi::OsStr, path::PathBuf, process::Command};
use anyhow::Result;
pub fn root_directories() -> Result<Vec<PathBuf>> {
- let texmf = run(&["-var-value", "TEXMF"])?;
+ let texmf = run(["-var-value", "TEXMF"])?;
let expand_arg = format!("--expand-braces={}", texmf);
- let expanded = run(&[&expand_arg])?;
+ let expanded = run([&expand_arg])?;
let directories = env::split_paths(&expanded.replace('!', ""))
.filter(|path| path.exists())
.collect();
diff --git a/support/texlab/src/distro/miktex.rs b/support/texlab/src/distro/miktex.rs
index fc778752db..1dfe1b9522 100644
--- a/support/texlab/src/distro/miktex.rs
+++ b/support/texlab/src/distro/miktex.rs
@@ -45,7 +45,7 @@ fn parse_database(bytes: &[u8]) -> io::Result<Vec<PathBuf>> {
let mut files = Vec::new();
for i in 0..table_size {
- let offset = table_address + i * FNDB_ENTRY_SIZE as u32;
+ let offset = table_address + i * FNDB_ENTRY_SIZE;
reader.set_position(u64::from(offset));
let file_name_offset = read_u32(&mut reader)? as usize;
let directory_offset = read_u32(&mut reader)? as usize;
diff --git a/support/texlab/src/features/completion/builder.rs b/support/texlab/src/features/completion/builder.rs
index f8ea4c5d15..686d39b62b 100644
--- a/support/texlab/src/features/completion/builder.rs
+++ b/support/texlab/src/features/completion/builder.rs
@@ -60,8 +60,7 @@ impl<'db> CompletionBuilder<'db> {
.take_while(|word| word.text_range() != token.text_range())
.chain(std::iter::once(token.clone()))
.filter(|word| word.text_range().start() < context.offset)
- .join(" ")
- .into(),
+ .join(" "),
None => token.text().into(),
}
}
@@ -180,14 +179,7 @@ impl<'db> CompletionBuilder<'db> {
"{} {}",
key,
WHITESPACE_REGEX
- .replace_all(
- &code
- .replace('{', " ")
- .replace('}', " ")
- .replace(',', " ")
- .replace('=', " "),
- " "
- )
+ .replace_all(&code.replace(['{', '}', ',', '='], " "), " ")
.trim(),
);
diff --git a/support/texlab/src/features/completion/include.rs b/support/texlab/src/features/completion/include.rs
index bde7544570..5d7654a208 100644
--- a/support/texlab/src/features/completion/include.rs
+++ b/support/texlab/src/features/completion/include.rs
@@ -119,7 +119,7 @@ fn current_dir(
path.push(graphics_path);
}
- path.push(&path_text);
+ path.push(path_text);
if !path_text.ends_with('/') {
path.pop();
}
diff --git a/support/texlab/src/features/folding.rs b/support/texlab/src/features/folding.rs
index 153b839f57..91c9571b61 100644
--- a/support/texlab/src/features/folding.rs
+++ b/support/texlab/src/features/folding.rs
@@ -57,6 +57,7 @@ fn create_range(range: Range) -> FoldingRange {
start_character: Some(range.start.character),
end_line: range.end.line,
end_character: Some(range.end.character),
+ collapsed_text: None,
kind: Some(FoldingRangeKind::Region),
}
}
diff --git a/support/texlab/src/features/forward_search.rs b/support/texlab/src/features/forward_search.rs
index 47be702659..8e5a2cc59c 100644
--- a/support/texlab/src/features/forward_search.rs
+++ b/support/texlab/src/features/forward_search.rs
@@ -15,6 +15,9 @@ pub enum Error {
#[error("TeX document '{0}' not found")]
TexNotFound(Url),
+ #[error("TeX document '{0}' is invalid")]
+ InvalidTexFile(Url),
+
#[error("PDF document '{0}' not found")]
PdfNotFound(PathBuf),
@@ -59,8 +62,16 @@ impl Command {
.as_deref()
.ok_or_else(|| Error::NoLocalFile(uri.clone()))?;
- let pdf_name = format!("{}.pdf", parent.location(db).stem(db).unwrap());
- let pdf_path = output_dir.join(pdf_name);
+ let pdf_path = match parent.location(db).stem(db) {
+ Some(stem) => {
+ let pdf_name = format!("{}.pdf", stem);
+ output_dir.join(pdf_name)
+ }
+ None => {
+ return Err(Error::InvalidTexFile(uri.clone()));
+ }
+ };
+
if !pdf_path.exists() {
return Err(Error::PdfNotFound(pdf_path));
}
diff --git a/support/texlab/src/features/symbol.rs b/support/texlab/src/features/symbol.rs
index c16193efcb..58004b50ef 100644
--- a/support/texlab/src/features/symbol.rs
+++ b/support/texlab/src/features/symbol.rs
@@ -9,7 +9,7 @@ use lsp_types::{DocumentSymbolResponse, SymbolInformation, Url, WorkspaceSymbolP
use crate::{db::Workspace, util::capabilities::ClientCapabilitiesExt, Db};
-use self::project_order::ProjectOrdering;
+use self::{project_order::ProjectOrdering, types::InternalSymbol};
pub fn find_document_symbols(db: &dyn Db, uri: &Url) -> Option<DocumentSymbolResponse> {
let workspace = Workspace::get(db);
@@ -18,6 +18,11 @@ pub fn find_document_symbols(db: &dyn Db, uri: &Url) -> Option<DocumentSymbolRes
let mut buf = Vec::new();
latex::find_symbols(db, document, &mut buf);
bibtex::find_symbols(db, document, &mut buf);
+
+ let options = &Workspace::get(db).options(db).symbols;
+
+ InternalSymbol::filter(&mut buf, &options);
+
if workspace
.client_capabilities(db)
.has_hierarchical_document_symbol_support()
diff --git a/support/texlab/src/features/symbol/types.rs b/support/texlab/src/features/symbol/types.rs
index be0ffeceda..fb3bca217b 100644
--- a/support/texlab/src/features/symbol/types.rs
+++ b/support/texlab/src/features/symbol/types.rs
@@ -2,8 +2,8 @@ use lsp_types::{DocumentSymbol, Location, Range, SymbolInformation, SymbolKind,
use crate::{
db::Word,
- util::{lang_data::BibtexEntryTypeCategory, lsp_enums::Structure},
- Db,
+ util::{self, lang_data::BibtexEntryTypeCategory, lsp_enums::Structure},
+ Db, SymbolOptions,
};
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
@@ -80,6 +80,26 @@ impl InternalSymbol {
buffer.push(self);
}
+ pub fn filter(container: &mut Vec<InternalSymbol>, options: &SymbolOptions) {
+ let mut i = 0;
+ while i < container.len() {
+ let symbol = &mut container[i];
+
+ if util::regex_filter::filter(
+ &symbol.name,
+ &options.allowed_patterns,
+ &options.ignored_patterns,
+ ) {
+ Self::filter(&mut symbol.children, options);
+ i += 1;
+ } else {
+ drop(symbol);
+ let mut symbol = container.remove(i);
+ container.append(&mut symbol.children);
+ }
+ }
+ }
+
pub fn into_document_symbol(self, db: &dyn Db) -> DocumentSymbol {
let children = self
.children
diff --git a/support/texlab/src/lib.rs b/support/texlab/src/lib.rs
index 45b96fb265..46ee3ddd1c 100644
--- a/support/texlab/src/lib.rs
+++ b/support/texlab/src/lib.rs
@@ -9,9 +9,9 @@ mod options;
pub mod parser;
mod server;
pub mod syntax;
-pub(crate) mod util;
+pub mod util;
-pub use self::{options::*, server::Server};
+pub use self::{client::LspClient, options::*, server::Server};
#[salsa::jar(db = Db)]
pub struct Jar(
@@ -116,6 +116,3 @@ pub(crate) fn normalize_uri(uri: &mut lsp_types::Url) {
uri.set_fragment(None);
}
-
-#[cfg(test)]
-mod tests;
diff --git a/support/texlab/src/options.rs b/support/texlab/src/options.rs
index 6cbba51823..0e87d11fab 100644
--- a/support/texlab/src/options.rs
+++ b/support/texlab/src/options.rs
@@ -16,6 +16,7 @@ pub struct Options {
pub diagnostics_delay: DiagnosticsDelay,
pub build: BuildOptions,
pub chktex: ChktexOptions,
+ pub symbols: SymbolOptions,
pub latexindent: LatexindentOptions,
pub forward_search: ForwardSearchOptions,
}
@@ -120,12 +121,20 @@ pub struct ForwardSearchOptions {
#[serde(rename_all = "camelCase")]
#[serde(default)]
pub struct DiagnosticsOptions {
- pub allowed_patterns: Vec<DiagnosticsPattern>,
- pub ignored_patterns: Vec<DiagnosticsPattern>,
+ pub allowed_patterns: Vec<RegexPattern>,
+ pub ignored_patterns: Vec<RegexPattern>,
+}
+
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+#[serde(default)]
+pub struct SymbolOptions {
+ pub allowed_patterns: Vec<RegexPattern>,
+ pub ignored_patterns: Vec<RegexPattern>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
-pub struct DiagnosticsPattern(#[serde(with = "serde_regex")] pub Regex);
+pub struct RegexPattern(#[serde(with = "serde_regex")] pub Regex);
#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
diff --git a/support/texlab/src/parser/build_log.rs b/support/texlab/src/parser/build_log.rs
index 1e5eca26f8..635f9adfb4 100644
--- a/support/texlab/src/parser/build_log.rs
+++ b/support/texlab/src/parser/build_log.rs
@@ -105,11 +105,11 @@ fn prepare_log(log: &str) -> String {
} else if line.chars().count() == MAX_LINE_LENGTH {
let mut new_line = String::new();
new_line.push_str(line);
- while let Some(old_line) = old_lines.next() {
- new_line.push_str(old_line);
- if old_line.chars().count() != MAX_LINE_LENGTH {
- break;
- }
+ for old_line in old_lines.by_ref() {
+ new_line.push_str(old_line);
+ if old_line.chars().count() != MAX_LINE_LENGTH {
+ break;
+ }
}
new_lines.push(new_line);
} else {
diff --git a/support/texlab/src/server.rs b/support/texlab/src/server.rs
index fe6f75e74a..567d912435 100644
--- a/support/texlab/src/server.rs
+++ b/support/texlab/src/server.rs
@@ -173,7 +173,6 @@ impl Server {
name: "TexLab".to_owned(),
version: Some(env!("CARGO_PKG_VERSION").to_owned()),
}),
- offset_encoding: None,
};
self.connection
.initialize_finish(id, serde_json::to_value(result)?)?;
@@ -758,6 +757,18 @@ impl Server {
Ok(())
}
+ fn code_actions(&mut self, id: RequestId, _params: CodeActionParams) -> Result<()> {
+ self.client
+ .send_response(lsp_server::Response::new_ok(id, Vec::<CodeAction>::new()))?;
+ Ok(())
+ }
+
+ fn code_action_resolve(&mut self, id: RequestId, action: CodeAction) -> Result<()> {
+ self.client
+ .send_response(lsp_server::Response::new_ok(id, action))?;
+ Ok(())
+ }
+
fn handle_file_event(&mut self, event: notify::Event) {
let mut changed = false;
@@ -823,7 +834,7 @@ impl Server {
.on::<DocumentSymbolRequest, _>(|id, params| {
self.document_symbols(id, params)
})?
- .on::<WorkspaceSymbol, _>(|id, params| self.workspace_symbols(id, params))?
+ .on::<WorkspaceSymbolRequest, _>(|id, params| self.workspace_symbols(id, params))?
.on::<Completion, _>(|id, params| {
self.completion(id, params)?;
Ok(())
@@ -855,6 +866,12 @@ impl Server {
.on::<InlayHintResolveRequest,_>(|id, params| {
self.inlay_hint_resolve(id, params)
})?
+ .on::<CodeActionRequest, _>(|id, params| {
+ self.code_actions(id, params)
+ })?
+ .on::<CodeActionResolveRequest, _>(|id, params| {
+ self.code_action_resolve(id, params)
+ })?
.default()
{
self.connection.sender.send(response.into())?;
@@ -983,6 +1000,7 @@ impl From<forward_search::Error> for ForwardSearchStatus {
fn from(err: forward_search::Error) -> Self {
match err {
forward_search::Error::TexNotFound(_) => ForwardSearchStatus::FAILURE,
+ forward_search::Error::InvalidTexFile(_) => ForwardSearchStatus::ERROR,
forward_search::Error::PdfNotFound(_) => ForwardSearchStatus::ERROR,
forward_search::Error::NoLocalFile(_) => ForwardSearchStatus::FAILURE,
forward_search::Error::Unconfigured => ForwardSearchStatus::UNCONFIGURED,
diff --git a/support/texlab/src/tests/client.rs b/support/texlab/src/tests/client.rs
deleted file mode 100644
index ff6b23469b..0000000000
--- a/support/texlab/src/tests/client.rs
+++ /dev/null
@@ -1,159 +0,0 @@
-use std::sync::Once;
-
-use anyhow::{bail, Result};
-use crossbeam_channel::{Receiver, Sender};
-use lsp_server::{Connection, Message, Notification, Request, Response};
-use lsp_types::{
- notification::{Exit, Initialized},
- request::{Initialize, Shutdown},
- ClientCapabilities, ClientInfo, DidOpenTextDocumentParams, InitializeParams, InitializeResult,
- InitializedParams, Url, WorkspaceFolder,
-};
-use tempfile::{tempdir, TempDir};
-
-use crate::Server;
-
-static INIT_LOGGER: Once = Once::new();
-
-pub struct IncomingHandler {
- _handle: jod_thread::JoinHandle<Result<()>>,
- pub requests: Receiver<Request>,
- pub notifications: Receiver<Notification>,
- pub responses: Receiver<Response>,
-}
-
-impl IncomingHandler {
- pub fn spawn(receiver: Receiver<Message>) -> Self {
- let (req_sender, req_receiver) = crossbeam_channel::unbounded();
- let (not_sender, not_receiver) = crossbeam_channel::unbounded();
- let (res_sender, res_receiver) = crossbeam_channel::unbounded();
-
- let _handle = jod_thread::spawn(move || {
- for message in &receiver {
- match message {
- Message::Request(req) => req_sender.send(req)?,
- Message::Response(res) => res_sender.send(res)?,
- Message::Notification(not) => not_sender.send(not)?,
- };
- }
-
- Ok(())
- });
-
- Self {
- _handle,
- requests: req_receiver,
- notifications: not_receiver,
- responses: res_receiver,
- }
- }
-}
-
-pub struct ClientResult {
- pub directory: TempDir,
- pub incoming: IncomingHandler,
-}
-
-pub struct Client {
- outgoing: Sender<Message>,
- incoming: IncomingHandler,
- directory: TempDir,
- request_id: i32,
- _handle: jod_thread::JoinHandle,
-}
-
-impl Client {
- pub fn spawn() -> Self {
- INIT_LOGGER.call_once(|| env_logger::init());
-
- let directory = tempdir().unwrap();
- let (client, server) = Connection::memory();
- let incoming = IncomingHandler::spawn(client.receiver);
- let outgoing = client.sender;
- let server = Server::new(server);
- let _handle = jod_thread::spawn(move || {
- server.run().expect("server failed to run");
- });
-
- Self {
- outgoing,
- incoming,
- directory,
- request_id: 0,
- _handle,
- }
- }
-
- pub fn initialize(
- &mut self,
- client_capabilities: ClientCapabilities,
- client_info: Option<ClientInfo>,
- ) -> InitializeResult {
- let result = self
- .request::<Initialize>(InitializeParams {
- initialization_options: Some(serde_json::json!({ "skipDistro": true })),
- capabilities: client_capabilities,
- workspace_folders: Some(vec![WorkspaceFolder {
- name: "Test".into(),
- uri: Url::from_directory_path(self.directory.path()).unwrap(),
- }]),
- client_info,
- ..InitializeParams::default()
- })
- .unwrap();
-
- self.notify::<Initialized>(InitializedParams {});
- result
- }
-
- pub fn request<R: lsp_types::request::Request>(
- &mut self,
- params: R::Params,
- ) -> Result<R::Result> {
- self.request_id += 1;
-
- self.outgoing
- .send(Request::new(self.request_id.into(), R::METHOD.into(), params).into())
- .unwrap();
-
- let response = self.incoming.responses.recv().unwrap();
- assert_eq!(response.id, self.request_id.into());
-
- let result = match response.result {
- Some(result) => result,
- None => bail!("request failed: {:?}", response.error),
- };
-
- Ok(serde_json::from_value(result)?)
- }
-
- pub fn notify<N: lsp_types::notification::Notification>(&mut self, params: N::Params) {
- self.outgoing
- .send(Notification::new(N::METHOD.into(), serde_json::to_value(params).unwrap()).into())
- .unwrap();
- }
-
- pub fn open(&mut self, name: &str, language_id: &str, text: String) {
- self.notify::<lsp_types::notification::DidOpenTextDocument>(DidOpenTextDocumentParams {
- text_document: lsp_types::TextDocumentItem {
- uri: self.uri(name),
- language_id: language_id.to_string(),
- version: 0,
- text,
- },
- });
- }
-
- pub fn shutdown(mut self) -> ClientResult {
- self.request::<Shutdown>(()).unwrap();
- self.notify::<Exit>(());
- ClientResult {
- directory: self.directory,
- incoming: self.incoming,
- }
- }
-
- pub fn uri(&self, name: &str) -> Url {
- Url::from_file_path(self.directory.path().join(name)).unwrap()
- }
-}
diff --git a/support/texlab/src/tests/fixture.rs b/support/texlab/src/tests/fixture.rs
deleted file mode 100644
index fb2a6e6d69..0000000000
--- a/support/texlab/src/tests/fixture.rs
+++ /dev/null
@@ -1,126 +0,0 @@
-use std::collections::BTreeMap;
-
-use lsp_types::{Position, Range, TextDocumentIdentifier, TextDocumentPositionParams};
-use rustc_hash::FxHashMap;
-
-use super::client::Client;
-
-#[derive(Debug, PartialEq, Eq, Clone, Hash)]
-enum Line<'a> {
- File(&'a str, &'a str),
- Plain(&'a str),
- Range(u32, u32, std::ops::Range<usize>),
- Cursor(usize),
- Empty,
-}
-
-fn parse_line(line: &str) -> Line {
- if let Some(name) = line.strip_prefix("%ROOT ") {
- Line::File(name, "texlabroot")
- } else if let Some(name) = line.strip_prefix("%TEX ") {
- Line::File(name, "latex")
- } else if let Some(name) = line.strip_prefix("%BIB ") {
- Line::File(name, "bibtex")
- } else if let Some(name) = line.strip_prefix("%LOG ") {
- Line::File(name, "log")
- } else if let Some(text) = line.strip_prefix("%SRC ") {
- Line::Plain(text)
- } else if let Some(text) = line.strip_prefix("%CUR ") {
- let position = text.find('^').unwrap();
- Line::Cursor(position)
- } else if line.is_empty() {
- Line::Empty
- } else {
- let key1 = line[1..2].parse().unwrap();
- let key2 = line[3..4].parse().unwrap();
- let line = &line[5..];
- let range = line
- .find('^')
- .map_or(0..0, |start| start..(line.rfind('^').unwrap() + 1));
- Line::Range(key1, key2, range)
- }
-}
-
-#[derive(Debug, Default)]
-pub struct FileRange<'a> {
- pub name: &'a str,
- pub range: Range,
-}
-
-#[derive(Debug, Default)]
-pub struct File<'a> {
- pub name: &'a str,
- pub lang: &'a str,
- pub text: String,
-}
-
-#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
-pub struct FileCursor<'a> {
- pub name: &'a str,
- pub position: Position,
-}
-
-impl<'a> FileCursor<'a> {
- pub fn into_params(self, server: &Client) -> TextDocumentPositionParams {
- let text_document = TextDocumentIdentifier::new(server.uri(self.name));
- TextDocumentPositionParams {
- text_document,
- position: self.position,
- }
- }
-}
-
-#[derive(Debug, Default)]
-pub struct Fixture<'a> {
- pub files: Vec<File<'a>>,
- pub cursor: Option<FileCursor<'a>>,
- pub ranges: BTreeMap<u32, FxHashMap<u32, FileRange<'a>>>,
-}
-
-pub fn parse(input: &str) -> Fixture {
- let mut fixture = Fixture::default();
- let mut file = File::default();
- let mut file_line_index = 0;
- for line in input.lines().map(parse_line) {
- match line {
- Line::File(name, lang) => {
- if !file.name.is_empty() {
- fixture.files.push(file);
- file = File::default();
- }
-
- file.name = name;
- file.lang = lang;
- file_line_index = 0;
- }
- Line::Plain(line) => {
- file.text.push_str(line);
- file.text.push('\n');
- file_line_index += 1;
- }
- Line::Range(key1, key2, range) => {
- let line = file_line_index - 1;
- let start = Position::new(line, range.start.try_into().unwrap());
- let end = Position::new(line, range.end.try_into().unwrap());
- let range = Range::new(start, end);
- fixture.ranges.entry(key1).or_default().insert(
- key2,
- FileRange {
- name: file.name,
- range,
- },
- );
- }
- Line::Cursor(position) => {
- fixture.cursor = Some(FileCursor {
- name: file.name,
- position: Position::new(file_line_index - 1, position.try_into().unwrap()),
- });
- }
- Line::Empty => {}
- };
- }
-
- fixture.files.push(file);
- fixture
-}
diff --git a/support/texlab/src/tests/issues.rs b/support/texlab/src/tests/issues.rs
deleted file mode 100644
index 8f578f5ada..0000000000
--- a/support/texlab/src/tests/issues.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-use insta::assert_debug_snapshot;
-
-use crate::Options;
-
-#[test]
-fn issue_707() {
- assert_debug_snapshot!(
- serde_json::from_value::<Option<Options>>(serde_json::json!({}))
- .unwrap()
- .unwrap_or_default()
- );
-}
diff --git a/support/texlab/src/tests/snapshots/texlab__tests__issues__issue_707.snap b/support/texlab/src/tests/snapshots/texlab__tests__issues__issue_707.snap
deleted file mode 100644
index 38e15f8103..0000000000
--- a/support/texlab/src/tests/snapshots/texlab__tests__issues__issue_707.snap
+++ /dev/null
@@ -1,45 +0,0 @@
----
-source: src/tests/issues.rs
-expression: "serde_json::from_value::<Option<Options>>(serde_json::json!({})).unwrap().unwrap_or_default()"
----
-Options {
- root_directory: None,
- aux_directory: None,
- bibtex_formatter: Texlab,
- latex_formatter: Latexindent,
- formatter_line_length: None,
- diagnostics: DiagnosticsOptions {
- allowed_patterns: [],
- ignored_patterns: [],
- },
- diagnostics_delay: DiagnosticsDelay(
- 300ms,
- ),
- build: BuildOptions {
- executable: BuildExecutable(
- "latexmk",
- ),
- args: BuildArgs(
- [
- "-pdf",
- "-interaction=nonstopmode",
- "-synctex=1",
- "%f",
- ],
- ),
- on_save: false,
- forward_search_after: false,
- },
- chktex: ChktexOptions {
- on_open_and_save: false,
- on_edit: false,
- },
- latexindent: LatexindentOptions {
- local: None,
- modify_line_breaks: false,
- },
- forward_search: ForwardSearchOptions {
- executable: None,
- args: None,
- },
-}
diff --git a/support/texlab/src/tests/text_document/completion.rs b/support/texlab/src/tests/text_document/completion.rs
deleted file mode 100644
index 7524eb2017..0000000000
--- a/support/texlab/src/tests/text_document/completion.rs
+++ /dev/null
@@ -1,834 +0,0 @@
-use insta::assert_json_snapshot;
-use lsp_types::{
- request::{Completion, ResolveCompletionItem},
- CompletionItem, CompletionList, CompletionParams, CompletionResponse, CompletionTextEdit,
- Range,
-};
-
-use crate::tests::{client::Client, fixture};
-
-fn complete(fixture: &str) -> Vec<CompletionItem> {
- let mut client = Client::spawn();
- client.initialize(
- serde_json::from_value(serde_json::json!({
- "textDocument": {
- "completion": {
- "completionItem": {
- "documentationFormat": ["plaintext", "markdown"]
- }
- }
- }
- }))
- .unwrap(),
- None,
- );
-
- let fixture = fixture::parse(fixture);
- for file in fixture.files {
- client.open(file.name, file.lang, file.text);
- }
-
- let range = fixture
- .ranges
- .values()
- .next()
- .and_then(|map| map.values().next())
- .map_or_else(
- || {
- let position = fixture.cursor.unwrap().position;
- Range::new(position, position)
- },
- |file_range| file_range.range,
- );
-
- let actual_list = client
- .request::<Completion>(CompletionParams {
- text_document_position: fixture.cursor.unwrap().into_params(&client),
- partial_result_params: Default::default(),
- work_done_progress_params: Default::default(),
- context: None,
- })
- .unwrap()
- .map_or(CompletionList::default(), |actual| match actual {
- CompletionResponse::List(list) => list,
- CompletionResponse::Array(_) => unreachable!(),
- });
-
- for item in &actual_list.items {
- if let Some(CompletionTextEdit::Edit(edit)) = item.text_edit.as_ref() {
- assert_eq!(edit.range, range);
- }
- }
-
- let actual_items = actual_list
- .items
- .into_iter()
- .take(5)
- .map(|item| client.request::<ResolveCompletionItem>(item).unwrap())
- .collect();
-
- client.shutdown();
- actual_items
-}
-
-macro_rules! assert_items {
- ($items:expr) => {
- assert_json_snapshot!($items, {
- "[].data" => "[data]",
- "[].sortText" => "[sortText]",
- "[].documentation" => "[documentation]",
- "[].textEdit.range" => "[range]",
- "[]" => insta::sorted_redaction()
- });
- };
-}
-
-#[test]
-fn acronym_ref_simple() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
-%SRC \acrshort{f}
-%CUR ^
-%1.1 ^"#
- ));
-}
-
-#[test]
-fn acronym_ref_empty() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
-%SRC \acrshort{}
-%CUR ^"#
- ));
-}
-
-#[test]
-fn acronym_ref_after_group() {
- let actual_items = complete(
- r#"
-%TEX main.tex
-%SRC \newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
-%SRC \acrshort{}
-%CUR ^
-%1.1 ^"#,
- );
-
- assert_eq!(actual_items, Vec::new());
-}
-
-#[test]
-fn acronym_ref_open_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
-%SRC \acrshort{f
-%CUR ^
-%1.1 ^"#
- ));
-}
-
-#[test]
-fn acronym_package_ref() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \acrodef{fpsLabel}[FPS]{Frames per Second}
-%SRC \ac{f
-%CUR ^
-%1.1 ^"#
- ));
-}
-
-#[test]
-fn glossary_ref_simple() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
-%SRC \gls{f}
-%CUR ^
-%1.1 ^"#
- ));
-}
-
-#[test]
-fn glossary_ref_open_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
-%SRC \gls{f
-%CUR ^
-%1.1 ^"#
- ));
-}
-
-#[test]
-fn argument_empty() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \usepackage{amsfonts}
-%SRC \mathbb{}
-%CUR ^"#
- ));
-}
-
-#[test]
-fn argument_word() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \usepackage{amsfonts}
-%SRC \mathbb{A}
-%CUR ^
-%1.1 ^"#
- ));
-}
-
-#[test]
-fn argument_open_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \usepackage{amsfonts}
-%SRC \mathbb{
-%CUR ^
-%SRC Test"#
- ));
-}
-
-#[test]
-fn argument_open_brace_unrelated() {
- let actual_items = complete(
- r#"
-%TEX main.tex
-%SRC \usepackage{amsfonts}
-%SRC \mathbb{}{
-%CUR ^
-%SRC Test"#,
- );
-
- assert_eq!(actual_items, Vec::new());
-}
-
-#[test]
-fn begin_environment_without_snippet_support() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \beg
-%CUR ^
-%1.1 ^^^"#
- ));
-}
-
-#[test]
-fn citation() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC \bibliography{main}
-%SRC \begin{document}
-%SRC \cite{
-%CUR ^
-%SRC \end{document}
-
-%BIB main.bib
-%SRC @article{foo:2019,
-%SRC author = {Foo Bar},
-%SRC title = {Baz Qux},
-%SRC year = {2019},
-%SRC }
-%SRC
-%SRC @article{bar:2005,}"#
- ));
-}
-
-#[test]
-fn citation_open_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \addbibresource{main.bib}
-%SRC \cite{
-%CUR ^
-
-%BIB main.bib
-%SRC @article{foo,}"#
- ));
-}
-
-#[test]
-fn citation_open_brace_multiple() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \addbibresource{main.bib}
-%SRC \cite{foo,a
-%CUR ^
-%1.1 ^
-
-%BIB main.bib
-%SRC @article{foo,}"#
- ));
-}
-
-#[test]
-fn citation_acronym() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \addbibresource{main.bib}
-%SRC \DeclareAcronym{foo}{cite={}}
-%CUR ^
-
-%BIB main.bib
-%SRC @article{foo,}"#
- ));
-}
-
-#[test]
-fn citation_after_brace() {
- let actual_items = complete(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC \bibliography{main}
-%SRC \begin{document}
-%SRC \cite{}
-%CUR ^
-%SRC \end{document}
-
-%BIB main.bib
-%SRC @article{foo,}"#,
- );
-
- assert_eq!(actual_items, Vec::new());
-}
-
-#[test]
-fn color_model_definition_simple() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \definecolor{foo}{}
-%CUR ^"#
- ));
-}
-
-#[test]
-fn color_model_definition_open_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \definecolor{foo}{
-%CUR ^"#
- ));
-}
-
-#[test]
-fn color_model_definition_set_simple() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \definecolorset{}
-%CUR ^"#
- ));
-}
-
-#[test]
-fn color_model_definition_set_open_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \definecolorset{
-%CUR ^"#
- ));
-}
-
-#[test]
-fn color_simple() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \color{}
-%CUR ^"#
- ));
-}
-
-#[test]
-fn color_word() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \color{re}
-%CUR ^
-%1.1 ^^"#
- ));
-}
-
-#[test]
-fn color_open_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \color{
-%CUR ^"#
- ));
-}
-
-#[test]
-fn component_command_simple() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \
-%CUR ^"#
- ));
-}
-
-#[test]
-fn component_command_simple_before() {
- let actual_items = complete(
- r#"
-%TEX main.tex
-%SRC \
-%CUR ^"#,
- );
-
- assert_eq!(actual_items, Vec::new());
-}
-
-#[test]
-fn component_command_simple_package() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \usepackage{lipsum}
-%SRC \lips
-%CUR ^
-%1.1 ^^^^"#
- ));
-}
-
-#[test]
-fn component_command_bibtex() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @article{b,
-%SRC c = {\LaT }
-%CUR ^
-%1.1 ^^^
-%SRC }"#
- ));
-}
-
-#[test]
-fn component_environment_simple() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \begin{doc
-%CUR ^
-%1.1 ^^^"#
- ));
-}
-
-#[test]
-fn component_environment_simple_end() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \begin{document}
-%SRC \end{
-%CUR ^"#
- ));
-}
-
-#[test]
-fn component_environment_class() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC \begin{thein}
-%CUR ^
-%1.1 ^^^^^"#
- ));
-}
-
-#[test]
-fn component_environment_command_definition() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \newcommand{\foo}{\begin{doc}
-%CUR ^
-%1.1 ^^^"#
- ));
-}
-
-#[test]
-fn entry_type_at_empty() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @
-%CUR ^"#
- ));
-}
-
-#[test]
-fn entry_type_before_preamble() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @preamble
-%CUR ^
-%1.1 ^^^^^^^^"#
- ));
-}
-
-#[test]
-fn entry_type_before_string() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @string
-%CUR ^
-%1.1 ^^^^^^"#
- ));
-}
-
-#[test]
-fn entry_type_before_article() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @article
-%CUR ^
-%1.1 ^^^^^^^"#
- ));
-}
-
-#[test]
-fn entry_type_after_preamble() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @preamble{
-%CUR ^
-%1.1 ^^^^^^^^"#
- ));
-}
-
-#[test]
-fn entry_type_after_string() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @string{
-%CUR ^
-%1.1 ^^^^^^"#
- ));
-}
-
-#[test]
-fn entry_type_complete_entry() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @article{foo, author = {foo}}
-%CUR ^
-%1.1 ^^^^^^^"#
- ));
-}
-
-#[test]
-fn field_empty_entry_open() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @article{foo,
-%CUR ^"#
- ));
-}
-
-#[test]
-fn field_empty_entry_closed() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @article{foo,}
-%CUR ^"#
- ));
-}
-
-#[test]
-fn field_entry_field_name() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @article{foo, a
-%CUR ^
-%1.1 ^"#
- ));
-}
-
-#[test]
-fn field_entry_two_fields_name_open() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @article{foo, author = bar, edit
-%CUR ^
-%1.1 ^^^^"#
- ));
-}
-
-#[test]
-fn field_entry_two_fields_name_closed() {
- assert_items!(complete(
- r#"
-%BIB main.bib
-%SRC @article{foo, author = bar, edit}
-%CUR ^
-%1.1 ^^^^"#
- ));
-}
-
-#[test]
-fn import_package_open_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \usepackage{lips
-%CUR ^
-%1.1 ^^^^"#
- ));
-}
-
-#[test]
-fn import_package_closed_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \usepackage{lips}
-%CUR ^
-%1.1 ^^^^"#
- ));
-}
-
-#[test]
-fn import_class_open_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \documentclass{art \foo
-%CUR ^
-%1.1 ^^^"#
- ));
-}
-
-#[test]
-fn import_class_closed_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \documentclass{art}
-%CUR ^
-%1.1 ^^^"#
- ));
-}
-
-#[test]
-fn label() {
- assert_items!(complete(
- r#"
-%TEX foo.tex
-%SRC \documentclass{article}
-%SRC
-%SRC \usepackage{amsmath}
-%SRC \usepackage{caption}
-%SRC \usepackage{amsthm}
-%SRC \newtheorem{lemma}{Lemma}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \section{Foo}%
-%SRC \label{sec:foo}
-%SRC
-%SRC \begin{equation}%
-%SRC \label{eq:foo}
-%SRC 1 + 1 = 2
-%SRC \end{equation}
-%SRC
-%SRC \begin{equation}%
-%SRC \label{eq:bar}
-%SRC 1 + 1 = 2
-%SRC \end{equation}
-%SRC
-%SRC \begin{figure}%
-%SRC \LaTeX{}
-%SRC \caption{Baz}%
-%SRC \label{fig:baz}
-%SRC \end{figure}
-%SRC
-%SRC \begin{lemma}%
-%SRC \label{thm:foo}
-%SRC 1 + 1 = 2
-%SRC \end{lemma}
-%SRC
-%SRC \include{bar}
-%SRC
-%SRC \end{document}
-
-%TEX bar.tex
-%SRC \section{Bar}%
-%SRC \label{sec:bar}
-%SRC
-%SRC Lorem ipsum dolor sit amet.
-%SRC \ref{}
-%CUR ^
-
-%TEX foo.aux
-%SRC \relax
-%SRC \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Baz\relax }}{1}\protected@file@percent }
-%SRC \providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
-%SRC \newlabel{fig:baz}{{1}{1}}
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
-%SRC \newlabel{sec:foo}{{1}{1}}
-%SRC \newlabel{eq:foo}{{1}{1}}
-%SRC \newlabel{eq:bar}{{2}{1}}
-%SRC \newlabel{thm:foo}{{1}{1}}
-%SRC \@input{bar.aux}"#
- ));
-}
-
-#[test]
-fn theorem_begin() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \newtheorem{lemma}{Lemma}
-%SRC \begin{lem
-%CUR ^
-%1.1 ^^^"#
- ));
-}
-
-#[test]
-fn theorem_end() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \newtheorem{lemma}{Lemma}
-%SRC \begin{}
-%SRC \end{lem
-%CUR ^
-%1.1 ^^^"#
- ));
-}
-
-#[test]
-fn tikz_library_open_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \usepgflibrary{
-%CUR ^"#
- ));
-}
-
-#[test]
-fn tikz_library_closed_brace() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \usepgflibrary{}
-%CUR ^"#
- ));
-}
-
-#[test]
-fn test_user_command() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \foobar
-%SRC \fooba
-%CUR ^
-%1.1 ^^^^^
-%SRC \begin{foo}
-%SRC \end{foo}
-%SRC \begin{fo}
-"#
- ));
-}
-
-#[test]
-fn test_user_environment() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \foobar
-%SRC \fooba
-%SRC \begin{foo}
-%SRC \end{foo}
-%SRC \begin{fo}
-%CUR ^
-%1.1 ^^
-"#
- ));
-}
-
-#[test]
-fn test_project_resolution_import() {
- assert_items!(complete(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC \import{sub}{sub/sub.tex}
-%SRC \lipsu
-%CUR ^
-%1.1 ^^^^^
-
-%TEX sub/sub.tex
-%SRC \input{child.tex}
-
-%TEX sub/child.tex
-%SRC \usepackage{lipsum}
-
-"#
- ));
-}
-
-#[test]
-fn test_project_resolution_texlabroot() {
- assert_items!(complete(
- r#"
-%TEX src/main.tex
-%SRC \documentclass{article}
-%SRC \include{src/foo}
-%SRC \lipsu
-%CUR ^
-%1.1 ^^^^^
-
-%TEX src/foo.tex
-%SRC \include{src/bar}
-
-%TEX src/bar.tex
-%SRC \usepackage{lipsum}
-
-%ROOT .texlabroot
-"#
- ));
-}
diff --git a/support/texlab/src/tests/text_document/definition.rs b/support/texlab/src/tests/text_document/definition.rs
deleted file mode 100644
index b1b915c6c9..0000000000
--- a/support/texlab/src/tests/text_document/definition.rs
+++ /dev/null
@@ -1,140 +0,0 @@
-use assert_unordered::assert_eq_unordered;
-use lsp_types::{
- request::GotoDefinition, ClientCapabilities, GotoDefinitionParams, GotoDefinitionResponse,
- LocationLink,
-};
-
-use crate::tests::{client::Client, fixture};
-
-fn check(fixture: &str) {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- let fixture = fixture::parse(fixture);
- for file in fixture.files {
- client.open(file.name, file.lang, file.text);
- }
-
- let mut expected_links = Vec::new();
- for ranges in fixture.ranges.values() {
- expected_links.push(LocationLink {
- origin_selection_range: Some(ranges[&1].range),
- target_uri: client.uri(ranges[&2].name),
- target_range: ranges[&2].range,
- target_selection_range: ranges[&3].range,
- });
- }
-
- let actual_links = client
- .request::<GotoDefinition>(GotoDefinitionParams {
- text_document_position_params: fixture.cursor.unwrap().into_params(&client),
- partial_result_params: Default::default(),
- work_done_progress_params: Default::default(),
- })
- .unwrap()
- .map_or(Vec::new(), |actual| match actual {
- GotoDefinitionResponse::Link(links) => links,
- GotoDefinitionResponse::Array(_) | GotoDefinitionResponse::Scalar(_) => unreachable!(),
- });
-
- client.shutdown();
- assert_eq_unordered!(actual_links, expected_links);
-}
-
-#[test]
-fn command_definition() {
- check(
- r#"
-%TEX main.tex
-%SRC \DeclareMathOperator{\foo}{foo}
-%1.3 ^^^^
-%1.2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-%SRC \foo
-%CUR ^
-%1.1 ^^^^
-"#,
- )
-}
-
-#[test]
-fn document() {
- check(
- r#"
-%TEX foo.tex
-%SRC \addbibresource{baz.bib}
-%CUR ^
-%1.1 ^^^^^^^
-
-%TEX bar.bib
-%SRC @article{foo, bar = {baz}}
-
-%TEX baz.bib
-%SRC @article{foo, bar = {baz}}
-%1.3
-%1.2
-"#,
- )
-}
-
-#[test]
-fn entry() {
- check(
- r#"
-%TEX foo.tex
-%SRC \addbibresource{baz.bib}
-%SRC \cite{foo}
-%CUR ^
-%1.1 ^^^
-
-%BIB bar.bib
-%SRC @article{foo, bar = {baz}}
-
-%BIB baz.bib
-%SRC @article{foo, bar = {baz}}
-%1.3 ^^^
-%1.2 ^^^^^^^^^^^^^^^^^^^^^^^^^^
-"#,
- )
-}
-
-#[test]
-fn string_simple() {
- check(
- r#"
-%BIB main.bib
-%SRC @string{foo = {bar}}
-%1.3 ^^^
-%1.2 ^^^^^^^^^^^^^^^^^^^^
-%SRC @article{bar, author = foo}
-%CUR ^
-%1.1 ^^^
-"#,
- )
-}
-
-#[test]
-fn string_join() {
- check(
- r#"
-%BIB main.bib
-%SRC @string{foo = {bar}}
-%1.3 ^^^
-%1.2 ^^^^^^^^^^^^^^^^^^^^
-%SRC @article{bar, author = foo # "bar"}
-%CUR ^
-%1.1 ^^^
-"#,
- )
-}
-
-#[test]
-fn string_field() {
- check(
- r#"
-%BIB main.bib
-%SRC @string{foo = {bar}}
-%SRC @article{bar, author = foo # "bar"}
-%CUR ^
-"#,
- )
-}
diff --git a/support/texlab/src/tests/text_document/did_change_configuration.rs b/support/texlab/src/tests/text_document/did_change_configuration.rs
deleted file mode 100644
index 15aae0ee4b..0000000000
--- a/support/texlab/src/tests/text_document/did_change_configuration.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-use insta::assert_snapshot;
-use lsp_types::{
- notification::{DidChangeConfiguration, Notification, ShowMessage},
- ClientCapabilities, DidChangeConfigurationParams, ShowMessageParams,
-};
-
-use crate::tests::client::Client;
-
-#[test]
-fn invalid_configuration() {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- client.notify::<DidChangeConfiguration>(DidChangeConfigurationParams {
- settings: serde_json::json!({
- "diagnostics": {
- "allowedPatterns": ["\\"]
- }
- }),
- });
-
- let result = client.shutdown();
- let message = result
- .incoming
- .notifications
- .into_iter()
- .filter_map(|notification| {
- notification
- .extract::<ShowMessageParams>(ShowMessage::METHOD)
- .ok()
- })
- .find(|params| params.message.contains("configuration"))
- .unwrap()
- .message;
-
- assert_snapshot!(message);
-}
diff --git a/support/texlab/src/tests/text_document/document_highlight.rs b/support/texlab/src/tests/text_document/document_highlight.rs
deleted file mode 100644
index 01945ce342..0000000000
--- a/support/texlab/src/tests/text_document/document_highlight.rs
+++ /dev/null
@@ -1,60 +0,0 @@
-use assert_unordered::assert_eq_unordered;
-use lsp_types::{
- request::DocumentHighlightRequest, ClientCapabilities, DocumentHighlight,
- DocumentHighlightKind, DocumentHighlightParams,
-};
-
-use crate::tests::{client::Client, fixture};
-
-fn check(fixture: &str) {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- let fixture = fixture::parse(fixture);
- for file in fixture.files {
- client.open(file.name, file.lang, file.text);
- }
-
- let mut expected_highlights = Vec::new();
- for ranges in fixture.ranges.values() {
- let (i, file_range) = ranges.iter().next().unwrap();
- let kind = match i {
- 1 => DocumentHighlightKind::TEXT,
- 2 => DocumentHighlightKind::READ,
- 3 => DocumentHighlightKind::WRITE,
- _ => unreachable!(),
- };
-
- expected_highlights.push(DocumentHighlight {
- range: file_range.range,
- kind: Some(kind),
- });
- }
-
- let actual_highlights = client
- .request::<DocumentHighlightRequest>(DocumentHighlightParams {
- text_document_position_params: fixture.cursor.unwrap().into_params(&client),
- partial_result_params: Default::default(),
- work_done_progress_params: Default::default(),
- })
- .unwrap()
- .unwrap_or_default();
-
- client.shutdown();
- assert_eq_unordered!(actual_highlights, expected_highlights);
-}
-
-#[test]
-fn test_label() {
- check(
- r#"
-%TEX main.tex
-%SRC \label{foo}
-%CUR ^
-%1.3 ^^^
-%SRC \ref{foo}
-%2.2 ^^^
-%SRC \label{bar}
-"#,
- )
-}
diff --git a/support/texlab/src/tests/text_document/document_link.rs b/support/texlab/src/tests/text_document/document_link.rs
deleted file mode 100644
index 8b4a30ceeb..0000000000
--- a/support/texlab/src/tests/text_document/document_link.rs
+++ /dev/null
@@ -1,71 +0,0 @@
-use assert_unordered::assert_eq_unordered;
-use lsp_types::{
- request::DocumentLinkRequest, ClientCapabilities, DocumentLink, DocumentLinkParams,
- TextDocumentIdentifier,
-};
-
-use crate::tests::{client::Client, fixture};
-
-fn check(fixture: &str) {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- let fixture = fixture::parse(fixture);
- for file in fixture.files {
- client.open(file.name, file.lang, file.text);
- }
-
- let mut expected_links = Vec::new();
- for ranges in fixture.ranges.values() {
- expected_links.push(DocumentLink {
- range: ranges[&1].range,
- target: Some(client.uri(ranges[&2].name)),
- tooltip: None,
- data: None,
- });
- }
-
- let actual_links = client
- .request::<DocumentLinkRequest>(DocumentLinkParams {
- text_document: TextDocumentIdentifier::new(client.uri(fixture.cursor.unwrap().name)),
- work_done_progress_params: Default::default(),
- partial_result_params: Default::default(),
- })
- .unwrap()
- .unwrap_or_default();
-
- client.shutdown();
- assert_eq_unordered!(actual_links, expected_links);
-}
-
-#[test]
-fn document_include() {
- check(
- r#"
-%TEX foo.tex
-%SRC \input{bar.tex}
-%1.1 ^^^^^^^
-%CUR ^
-
-%TEX bar.tex
-%SRC
-%1.2
-"#,
- )
-}
-
-#[test]
-fn document_import() {
- check(
- r#"
-%TEX foo.tex
-%SRC \import{.}{bar/baz}
-%1.1 ^^^^^^^
-%CUR ^
-
-%TEX bar/baz.tex
-%SRC
-%1.2
-"#,
- )
-}
diff --git a/support/texlab/src/tests/text_document/document_symbol.rs b/support/texlab/src/tests/text_document/document_symbol.rs
deleted file mode 100644
index 2eab81631e..0000000000
--- a/support/texlab/src/tests/text_document/document_symbol.rs
+++ /dev/null
@@ -1,408 +0,0 @@
-use insta::{assert_json_snapshot, internals::Redaction};
-use lsp_types::{
- request::DocumentSymbolRequest, DocumentSymbolParams, DocumentSymbolResponse,
- TextDocumentIdentifier, Url,
-};
-
-use crate::tests::{client::Client, fixture};
-
-struct SymbolResult {
- response: Option<DocumentSymbolResponse>,
- uri_redaction: Redaction,
-}
-
-fn find_symbols(fixture: &str, client_capabilities: serde_json::Value) -> SymbolResult {
- let mut client = Client::spawn();
- client.initialize(serde_json::from_value(client_capabilities).unwrap(), None);
-
- let fixture = fixture::parse(fixture);
- let file = fixture.files.into_iter().next().unwrap();
- client.open(file.name, file.lang, file.text);
-
- let response = client
- .request::<DocumentSymbolRequest>(DocumentSymbolParams {
- text_document: TextDocumentIdentifier::new(client.uri(file.name)),
- work_done_progress_params: Default::default(),
- partial_result_params: Default::default(),
- })
- .unwrap();
-
- let result = client.shutdown();
-
- let uri = Url::from_directory_path(result.directory.path()).unwrap();
- let uri_redaction = insta::dynamic_redaction(move |content, _path| {
- content.as_str().unwrap().replace(uri.as_str(), "[tmp]/")
- });
-
- SymbolResult {
- response,
- uri_redaction,
- }
-}
-
-macro_rules! assert_symbols {
- ($result:expr) => {
- let result = $result;
- assert_json_snapshot!(result.response, {
- "[].location.uri" => result.uri_redaction
- });
- };
-}
-
-#[test]
-fn enumerate_nested() {
- assert_symbols!(find_symbols(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \begin{enumerate}
-%SRC \item\label{it:foo} Foo
-%SRC \item\label{it:bar} Bar
-%SRC \item[Baz] Baz
-%SRC \item[Qux]\label{it:qux} Qux
-%SRC \end{enumerate}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \newlabel{it:foo}{{1}{1}}
-%SRC \newlabel{it:qux}{{2}{1}}
-"#,
- serde_json::json!({
- "textDocument": {
- "documentSymbol": {
- "hierarchicalDocumentSymbolSupport": true,
- },
- },
- }),
- ));
-}
-
-#[test]
-fn enumerate_flat() {
- assert_symbols!(find_symbols(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \begin{enumerate}
-%SRC \item\label{it:foo} Foo
-%SRC \item\label{it:bar} Bar
-%SRC \item[Baz] Baz
-%SRC \item[Qux]\label{it:qux} Qux
-%SRC \end{enumerate}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \newlabel{it:foo}{{1}{1}}
-%SRC \newlabel{it:qux}{{2}{1}}
-"#,
- serde_json::json!({}),
- ));
-}
-
-#[test]
-fn equation_nested() {
- assert_symbols!(find_symbols(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \begin{equation}\label{eq:foo}
-%SRC Foo
-%SRC \end{equation}
-%SRC
-%SRC \begin{equation}\label{eq:bar}
-%SRC Bar
-%SRC \end{equation}
-%SRC
-%SRC \begin{equation}
-%SRC Baz
-%SRC \end{equation}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \newlabel{eq:foo}{{1}{1}}
-"#,
- serde_json::json!({
- "textDocument": {
- "documentSymbol": {
- "hierarchicalDocumentSymbolSupport": true,
- },
- },
- }),
- ));
-}
-
-#[test]
-fn equation_flat() {
- assert_symbols!(find_symbols(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \begin{equation}\label{eq:foo}
-%SRC Foo
-%SRC \end{equation}
-%SRC
-%SRC \begin{equation}\label{eq:bar}
-%SRC Bar
-%SRC \end{equation}
-%SRC
-%SRC \begin{equation}
-%SRC Baz
-%SRC \end{equation}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \newlabel{eq:foo}{{1}{1}}
-"#,
- serde_json::json!({}),
- ));
-}
-
-#[test]
-fn float_nested() {
- assert_symbols!(find_symbols(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \begin{figure}
-%SRC Foo
-%SRC \caption{Foo}\label{fig:foo}
-%SRC \end{figure}
-%SRC
-%SRC \begin{figure}
-%SRC Bar
-%SRC \caption{Bar}\label{fig:bar}
-%SRC \end{figure}
-%SRC
-%SRC \begin{figure}
-%SRC Baz
-%SRC \caption{Baz}
-%SRC \end{figure}
-%SRC
-%SRC \begin{figure}
-%SRC Qux
-%SRC \end{figure}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Foo}}{1}\protected@file@percent }
-%SRC \newlabel{fig:foo}{{1}{1}}
-%SRC \@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Bar}}{1}\protected@file@percent }
-%SRC \@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Baz}}{1}\protected@file@percent }
-"#,
- serde_json::json!({
- "textDocument": {
- "documentSymbol": {
- "hierarchicalDocumentSymbolSupport": true,
- },
- },
- }),
- ));
-}
-
-#[test]
-fn float_flat() {
- assert_symbols!(find_symbols(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \begin{figure}
-%SRC Foo
-%SRC \caption{Foo}\label{fig:foo}
-%SRC \end{figure}
-%SRC
-%SRC \begin{figure}
-%SRC Bar
-%SRC \caption{Bar}\label{fig:bar}
-%SRC \end{figure}
-%SRC
-%SRC \begin{figure}
-%SRC Baz
-%SRC \caption{Baz}
-%SRC \end{figure}
-%SRC
-%SRC \begin{figure}
-%SRC Qux
-%SRC \end{figure}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Foo}}{1}\protected@file@percent }
-%SRC \newlabel{fig:foo}{{1}{1}}
-%SRC \@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Bar}}{1}\protected@file@percent }
-%SRC \@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Baz}}{1}\protected@file@percent }
-"#,
- serde_json::json!({}),
- ));
-}
-
-#[test]
-fn section_nested() {
- assert_symbols!(find_symbols(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \section{Foo}
-%SRC
-%SRC \section{Bar}\label{sec:bar}
-%SRC
-%SRC \subsection{Baz}\label{sec:baz}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
-%SRC \newlabel{sec:bar}{{2}{1}}
-"#,
- serde_json::json!({
- "textDocument": {
- "documentSymbol": {
- "hierarchicalDocumentSymbolSupport": true,
- },
- },
- }),
- ));
-}
-
-#[test]
-fn section_flat() {
- assert_symbols!(find_symbols(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \section{Foo}
-%SRC
-%SRC \section{Bar}\label{sec:bar}
-%SRC
-%SRC \subsection{Baz}\label{sec:baz}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
-%SRC \newlabel{sec:bar}{{2}{1}}
-"#,
- serde_json::json!({}),
- ));
-}
-
-#[test]
-fn theorem_nested() {
- assert_symbols!(find_symbols(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC \usepackage{amsthm}
-%SRC \newtheorem{lemma}{Lemma}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \begin{lemma}[Foo]\label{thm:foo}
-%SRC Foo
-%SRC \end{lemma}
-%SRC
-%SRC \begin{lemma}\label{thm:bar}
-%SRC Bar
-%SRC \end{lemma}
-%SRC
-%SRC \begin{lemma}\label{thm:baz}
-%SRC Baz
-%SRC \end{lemma}
-%SRC
-%SRC \begin{lemma}[Qux]
-%SRC Qux
-%SRC \end{lemma}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \newlabel{thm:foo}{{1}{1}}
-%SRC \newlabel{thm:bar}{{2}{1}}
-"#,
- serde_json::json!({
- "textDocument": {
- "documentSymbol": {
- "hierarchicalDocumentSymbolSupport": true,
- },
- },
- }),
- ));
-}
-
-#[test]
-fn theorem_flat() {
- assert_symbols!(find_symbols(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC \usepackage{amsthm}
-%SRC \newtheorem{lemma}{Lemma}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \begin{lemma}[Foo]\label{thm:foo}
-%SRC Foo
-%SRC \end{lemma}
-%SRC
-%SRC \begin{lemma}\label{thm:bar}
-%SRC Bar
-%SRC \end{lemma}
-%SRC
-%SRC \begin{lemma}\label{thm:baz}
-%SRC Baz
-%SRC \end{lemma}
-%SRC
-%SRC \begin{lemma}[Qux]
-%SRC Qux
-%SRC \end{lemma}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \newlabel{thm:foo}{{1}{1}}
-%SRC \newlabel{thm:bar}{{2}{1}}
-"#,
- serde_json::json!({}),
- ));
-}
diff --git a/support/texlab/src/tests/text_document/folding_range.rs b/support/texlab/src/tests/text_document/folding_range.rs
deleted file mode 100644
index 4b589222b1..0000000000
--- a/support/texlab/src/tests/text_document/folding_range.rs
+++ /dev/null
@@ -1,96 +0,0 @@
-use assert_unordered::assert_eq_unordered;
-use lsp_types::{
- request::FoldingRangeRequest, ClientCapabilities, FoldingRange, FoldingRangeKind,
- FoldingRangeParams, TextDocumentIdentifier,
-};
-
-use crate::tests::{client::Client, fixture};
-
-fn check(fixture: &str, expected_ranges: Vec<(u32, u32, u32, u32)>) {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- let fixture = fixture::parse(fixture);
- for file in fixture.files {
- client.open(file.name, file.lang, file.text);
- }
-
- let actual_foldings = client
- .request::<FoldingRangeRequest>(FoldingRangeParams {
- text_document: TextDocumentIdentifier::new(client.uri(fixture.cursor.unwrap().name)),
- work_done_progress_params: Default::default(),
- partial_result_params: Default::default(),
- })
- .unwrap()
- .unwrap_or_default();
-
- client.shutdown();
-
- let expected_foldings = expected_ranges
- .into_iter()
- .map(
- |(start_line, start_character, end_line, end_character)| FoldingRange {
- start_line,
- start_character: Some(start_character),
- end_line,
- end_character: Some(end_character),
- kind: Some(FoldingRangeKind::Region),
- },
- )
- .collect();
-
- assert_eq_unordered!(actual_foldings, expected_foldings);
-}
-
-#[test]
-fn latex() {
- check(
- r#"
-%TEX main.tex
-%SRC \begin{document}
-%SRC \section{Foo}
-%SRC foo
-%SRC \subsection{Bar}
-%SRC bar
-%SRC \section{Baz}
-%SRC baz
-%SRC \section{Qux}
-%SRC \end{document}
-%CUR ^
-"#,
- vec![
- (0, 0, 8, 14),
- (1, 4, 4, 7),
- (3, 4, 4, 7),
- (5, 4, 6, 7),
- (7, 4, 7, 17),
- ],
- )
-}
-
-#[test]
-fn bibtex() {
- check(
- r#"
-%BIB main.bib
-%SRC some junk
-%SRC here
-%SRC
-%SRC @article{foo,
-%SRC author = {bar},
-%SRC title = {baz}
-%SRC }
-%SRC
-%SRC @string{foo = "bar"}
-%SRC
-%SRC @comment{foo,
-%SRC author = {bar},
-%SRC title = {baz}
-%SRC }
-%SRC
-%SRC @preamble{"foo"}
-%CUR ^
-"#,
- vec![(3, 0, 6, 1), (8, 0, 8, 20), (15, 0, 15, 16)],
- )
-}
diff --git a/support/texlab/src/tests/text_document/formatting.rs b/support/texlab/src/tests/text_document/formatting.rs
deleted file mode 100644
index eb6804ca66..0000000000
--- a/support/texlab/src/tests/text_document/formatting.rs
+++ /dev/null
@@ -1,132 +0,0 @@
-use insta::assert_snapshot;
-use lsp_types::{
- request::Formatting, ClientCapabilities, DocumentFormattingParams, FormattingOptions,
- TextDocumentIdentifier,
-};
-
-use crate::{
- tests::{client::Client, fixture},
- util::{line_index::LineIndex, line_index_ext::LineIndexExt},
-};
-
-fn format(fixture: &str) -> String {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- let fixture = fixture::parse(fixture);
- let file = fixture.files.into_iter().next().unwrap();
- let old_text = file.text.clone();
- client.open(file.name, file.lang, file.text);
-
- let actual_edits = client
- .request::<Formatting>(DocumentFormattingParams {
- text_document: TextDocumentIdentifier::new(client.uri(file.name)),
- work_done_progress_params: Default::default(),
- options: FormattingOptions {
- insert_spaces: true,
- tab_size: 4,
- ..Default::default()
- },
- })
- .unwrap()
- .unwrap_or_default();
-
- client.shutdown();
-
- let line_index = LineIndex::new(&old_text);
- let mut actual_text = old_text;
- for edit in actual_edits.into_iter().rev() {
- let range = line_index.offset_lsp_range(edit.range);
- actual_text.replace_range::<std::ops::Range<usize>>(range.into(), &edit.new_text);
- }
-
- actual_text
-}
-
-#[test]
-fn bibtex_internal_wrap_long_lines() {
- assert_snapshot!(format(
- r#"
-%BIB main.bib
-%SRC @article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.
-%SRC Lorem ipsum dolor sit amet,
-%SRC consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_multiple_entries() {
- assert_snapshot!(format(
- r#"
-%BIB main.bib
-%SRC @article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet,
-%SRC consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}
-%SRC
-%SRC @article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet,
-%SRC consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}""#,
- ));
-}
-
-#[test]
-fn bibtex_internal_trailing_comma() {
- assert_snapshot!(format(
- r#"
-%BIB main.bib
-%SRC @article{foo, bar = baz}"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_insert_braces() {
- assert_snapshot!(format(
- r#"
-%BIB main.bib
-%SRC @article{foo, bar = baz,"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_command() {
- assert_snapshot!(format(
- r#"
-%BIB main.bib
-%SRC @article{foo, bar = "\baz",}"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_join_strings() {
- assert_snapshot!(format(
- r#"
-%BIB main.bib
-%SRC @article{foo, bar = "baz" # "qux"}"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_parens() {
- assert_snapshot!(format(
- r#"
-%BIB main.bib
-%SRC @article(foo,)"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_string() {
- assert_snapshot!(format(
- r#"
-%BIB main.bib
-%SRC @string{foo="bar"}"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_preamble() {
- assert_snapshot!(format(
- r#"
-%BIB main.bib
-%SRC @preamble{
-%SRC "foo bar baz" }"#,
- ));
-}
diff --git a/support/texlab/src/tests/text_document/hover.rs b/support/texlab/src/tests/text_document/hover.rs
deleted file mode 100644
index 302be82ca3..0000000000
--- a/support/texlab/src/tests/text_document/hover.rs
+++ /dev/null
@@ -1,303 +0,0 @@
-use lsp_types::{
- request::HoverRequest, ClientCapabilities, Hover, HoverContents, HoverParams, MarkupContent,
- MarkupKind,
-};
-
-use crate::{
- tests::{client::Client, fixture},
- util::{components::COMPONENT_DATABASE, lang_data::LANGUAGE_DATA},
-};
-
-fn check(fixture: &str, contents: Option<HoverContents>) {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- let fixture = fixture::parse(fixture);
- for file in fixture.files {
- client.open(file.name, file.lang, file.text);
- }
-
- let range = fixture
- .ranges
- .values()
- .next()
- .and_then(|map| map.values().next())
- .map(|file_range| file_range.range);
-
- let actual_hover = client
- .request::<HoverRequest>(HoverParams {
- text_document_position_params: fixture.cursor.unwrap().into_params(&client),
- work_done_progress_params: Default::default(),
- })
- .unwrap();
-
- client.shutdown();
-
- let expected_hover = contents.map(|contents| Hover { range, contents });
- assert_eq!(actual_hover, expected_hover);
-}
-
-#[test]
-fn empty_latex_document() {
- check(
- r#"
-%TEX main.tex
-%SRC
-%CUR ^
-"#,
- None,
- )
-}
-
-#[test]
-fn empty_bibtex_document() {
- check(
- r#"
-%BIB main.bib
-%SRC
-%CUR ^
-"#,
- None,
- )
-}
-
-#[test]
-fn citation_inside_cite() {
- check(
- r#"
-%BIB main.bib
-%SRC @article{foo, author = {Foo Bar}, title = {Baz Qux}, year = 1337}
-
-%TEX main.tex
-%SRC \addbibresource{main.bib}
-%SRC \cite{foo}
-%CUR ^
-%1.1 ^^^
-"#,
- Some(HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: "F. Bar: \"Baz Qux\". (1337).".to_string(),
- })),
- )
-}
-
-#[test]
-fn citation_inside_entry() {
- check(
- r#"
-%BIB main.bib
-%SRC @article{foo, author = {Foo Bar}, title = {Baz Qux}, year = 1337}
-%CUR ^
-%1.1 ^^^
-
-%TEX main.tex
-%SRC \addbibresource{main.bib}
-%SRC \cite{foo}
-"#,
- Some(HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: "F. Bar: \"Baz Qux\". (1337).".to_string(),
- })),
- )
-}
-
-#[test]
-fn component_known_package() {
- check(
- r#"
-%TEX main.tex
-%SRC \usepackage{amsmath}
-%CUR ^
-%1.1 ^^^^^^^
-"#,
- COMPONENT_DATABASE
- .documentation("amsmath")
- .map(HoverContents::Markup),
- )
-}
-
-#[test]
-fn component_unknown_class() {
- check(
- r#"
-%TEX main.tex
-%SRC \documentclass{abcdefghijklmnop}
-%CUR ^
-"#,
- None,
- )
-}
-
-#[test]
-fn entry_type_known_type() {
- check(
- r#"
-%BIB main.bib
-%SRC @article{foo,}
-%CUR ^
-%1.1 ^^^^^^^^
-"#,
- Some(HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: LANGUAGE_DATA
- .entry_type_documentation("article")
- .unwrap()
- .to_string(),
- })),
- )
-}
-
-#[test]
-fn entry_type_unknown_field() {
- check(
- r#"
-%BIB main.bib
-%SRC @foo{bar,}
-%CUR ^
-"#,
- None,
- )
-}
-
-#[test]
-fn entry_type_key() {
- check(
- r#"
-%BIB main.bib
-%SRC @foo{bar,}
-%CUR ^
-"#,
- None,
- )
-}
-
-#[test]
-fn field_known() {
- check(
- r#"
-%BIB main.bib
-%SRC @article{foo, author = bar}
-%CUR ^
-%1.1 ^^^^^^
-"#,
- Some(HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: LANGUAGE_DATA
- .field_documentation("author")
- .unwrap()
- .to_string(),
- })),
- )
-}
-
-#[test]
-fn field_unknown() {
- check(
- r#"
-%BIB main.bib
-%SRC @article{foo, bar = baz}
-%CUR ^
-"#,
- None,
- )
-}
-
-#[test]
-fn section() {
- check(
- r#"
-%TEX main.tex
-%SRC \section{Foo}
-%SRC \label{sec:foo}
-%CUR ^
-%1.1 ^^^^^^^
-"#,
- Some(HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: "Section (Foo)".to_string(),
- })),
- )
-}
-
-#[test]
-fn string_inside_reference() {
- check(
- r#"
-%BIB main.bib
-%SRC @string{foo = "Foo"}
-%SRC @string{bar = "Bar"}
-%SRC @article{baz, author = bar}
-%CUR ^
-%1.1 ^^^
-"#,
- Some(HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: "Bar".to_string(),
- })),
- )
-}
-
-#[test]
-fn string_inside_field() {
- check(
- r#"
-%BIB main.bib
-%SRC @string{foo = "Foo"}
-%SRC @string{bar = "Bar"}
-%SRC @article{baz, author = bar}
-%CUR ^
-"#,
- None,
- )
-}
-
-#[test]
-fn label_theorem_child_file() {
- check(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC \newtheorem{lemma}{Lemma}
-%SRC \include{child}
-%SRC \ref{thm:foo}
-%CUR ^
-%1.1 ^^^^^^^
-
-%TEX child.tex
-%SRC \begin{lemma}\label{thm:foo}
-%SRC 1 + 1 = 2
-%SRC \end{lemma}
-"#,
- Some(HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: "Lemma".to_string(),
- })),
- )
-}
-
-#[test]
-fn label_theorem_child_file_mumber() {
- check(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC \newtheorem{lemma}{Lemma}
-%SRC \include{child}
-%SRC \ref{thm:foo}
-%CUR ^
-%1.1 ^^^^^^^
-
-%TEX child.tex
-%SRC \begin{lemma}[Foo]\label{thm:foo}
-%SRC 1 + 1 = 2
-%SRC \end{lemma}
-
-%TEX child.aux
-%SRC \newlabel{thm:foo}{{1}{1}{Foo}{lemma.1}{}}
-"#,
- Some(HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: "Lemma 1 (Foo)".to_string(),
- })),
- )
-}
diff --git a/support/texlab/src/tests/text_document/inlay_hint.rs b/support/texlab/src/tests/text_document/inlay_hint.rs
deleted file mode 100644
index acf5c3e132..0000000000
--- a/support/texlab/src/tests/text_document/inlay_hint.rs
+++ /dev/null
@@ -1,65 +0,0 @@
-use insta::assert_json_snapshot;
-use lsp_types::{
- request::InlayHintRequest, ClientCapabilities, InlayHint, InlayHintParams, Position, Range,
- TextDocumentIdentifier,
-};
-
-use crate::tests::{client::Client, fixture};
-
-fn check(fixture: &str) -> Vec<InlayHint> {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- let fixture = fixture::parse(fixture);
- let uri = client.uri(fixture.files[0].name);
-
- for file in fixture.files {
- client.open(file.name, file.lang, file.text);
- }
-
- let actual_hints = client
- .request::<InlayHintRequest>(InlayHintParams {
- text_document: TextDocumentIdentifier::new(uri),
- range: Range::new(Position::new(0, 0), Position::new(12, 0)),
- work_done_progress_params: Default::default(),
- })
- .unwrap()
- .unwrap_or_default();
-
- client.shutdown();
- actual_hints
-}
-
-#[test]
-fn label_definition() {
- assert_json_snapshot!(check(
- r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC \usepackage{caption}
-%SRC \begin{document}
-%SRC \section{Foo}\label{sec:foo}
-%SRC \section{Bar}\label{sec:bar}
-%SRC \subsection{Baz}\label{sec:baz}
-%SRC \begin{figure}
-%SRC Test
-%SRC \label{fig:qux}
-%SRC \caption{Qux}
-%SRC \end{figure}
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
-%SRC \newlabel{fig:qux}{{\caption@xref {fig:qux}{ on input line 15}}{1}}
-%SRC \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Qux\relax }}{1}{}\protected@file@percent }
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}{}\protected@file@percent }
-%SRC \newlabel{sec:foo}{{1}{1}}
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}{}\protected@file@percent }
-%SRC \newlabel{sec:bar}{{2}{1}}
-%SRC \@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Baz}{1}{}\protected@file@percent }
-%SRC \newlabel{sec:baz}{{2.1}{1}}
-%SRC \gdef \@abspage@last{1}
-"#,
- ));
-}
diff --git a/support/texlab/src/tests/text_document/references.rs b/support/texlab/src/tests/text_document/references.rs
deleted file mode 100644
index a0ebed1fb4..0000000000
--- a/support/texlab/src/tests/text_document/references.rs
+++ /dev/null
@@ -1,271 +0,0 @@
-use assert_unordered::assert_eq_unordered;
-use lsp_types::{
- request::References, ClientCapabilities, Location, ReferenceContext, ReferenceParams,
-};
-
-use crate::tests::{client::Client, fixture};
-
-fn check(fixture: &str, context: ReferenceContext) {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- let fixture = fixture::parse(fixture);
- for file in fixture.files {
- client.open(file.name, file.lang, file.text);
- }
-
- let mut expected_locations = Vec::new();
- for ranges in fixture.ranges.values() {
- expected_locations.push(Location::new(client.uri(ranges[&1].name), ranges[&1].range));
- }
-
- let actual_locations = client
- .request::<References>(ReferenceParams {
- text_document_position: fixture.cursor.unwrap().into_params(&client),
- context,
- partial_result_params: Default::default(),
- work_done_progress_params: Default::default(),
- })
- .unwrap()
- .unwrap_or_default();
-
- client.shutdown();
-
- assert_eq_unordered!(actual_locations, expected_locations);
-}
-
-#[test]
-fn entry_definition() {
- check(
- r#"
-%BIB foo.bib
-%SRC @article{foo,}
-%CUR ^
-
-%TEX bar.tex
-%SRC \cite{foo}
-%1.1 ^^^
-%SRC \addbibresource{foo.bib}
-"#,
- ReferenceContext {
- include_declaration: false,
- },
- )
-}
-
-#[test]
-fn entry_definition_include_decl() {
- check(
- r#"
-%BIB foo.bib
-%SRC @article{foo,}
-%CUR ^
-%2.1 ^^^
-
-%TEX bar.tex
-%SRC \cite{foo}
-%1.1 ^^^
-%SRC \addbibresource{foo.bib}
-"#,
- ReferenceContext {
- include_declaration: true,
- },
- )
-}
-
-#[test]
-fn entry_reference() {
- check(
- r#"
-%BIB foo.bib
-%SRC @article{foo,}
-
-%TEX bar.tex
-%SRC \cite{foo}
-%CUR ^
-%1.1 ^^^
-%SRC \addbibresource{foo.bib}
-"#,
- ReferenceContext {
- include_declaration: false,
- },
- )
-}
-
-#[test]
-fn entry_reference_include_decl() {
- check(
- r#"
-%BIB foo.bib
-%SRC @article{foo,}
-%2.1 ^^^
-
-%TEX bar.tex
-%SRC \cite{foo}
-%CUR ^
-%1.1 ^^^
-%SRC \addbibresource{foo.bib}
-"#,
- ReferenceContext {
- include_declaration: true,
- },
- )
-}
-
-#[test]
-fn label_definition() {
- check(
- r#"
-%TEX foo.tex
-%SRC \label{foo}
-%CUR ^
-
-%TEX bar.tex
-%SRC \ref{foo}
-%1.1 ^^^
-%SRC \input{foo.tex}
-"#,
- ReferenceContext {
- include_declaration: false,
- },
- )
-}
-
-#[test]
-fn label_definition_include_decl() {
- check(
- r#"
-%TEX foo.tex
-%SRC \label{foo}
-%CUR ^
-%2.1 ^^^
-
-%TEX bar.tex
-%SRC \ref{foo}
-%1.1 ^^^
-%SRC \input{foo.tex}
-"#,
- ReferenceContext {
- include_declaration: true,
- },
- )
-}
-
-#[test]
-fn label_reference() {
- check(
- r#"
-%TEX foo.tex
-%SRC \label{foo}
-%SRC \input{bar.tex}
-
-%TEX bar.tex
-%SRC \ref{foo}
-%CUR ^
-%1.1 ^^^
-
-%TEX baz.tex
-%SRC \ref{foo}
-%2.1 ^^^
-%SRC \input{bar.tex}
-"#,
- ReferenceContext {
- include_declaration: false,
- },
- )
-}
-
-#[test]
-fn label_reference_include_decl() {
- check(
- r#"
-%TEX foo.tex
-%SRC \label{foo}
-%3.1 ^^^
-%SRC \input{bar.tex}
-
-%TEX bar.tex
-%SRC \ref{foo}
-%CUR ^
-%1.1 ^^^
-
-%TEX baz.tex
-%SRC \ref{foo}
-%2.1 ^^^
-%SRC \input{bar.tex}
-"#,
- ReferenceContext {
- include_declaration: true,
- },
- )
-}
-
-#[test]
-fn string_reference() {
- check(
- r#"
-%BIB main.bib
-%SRC @string{foo = {Foo}}
-%SRC @string{bar = {Bar}}
-%SRC @article{baz, author = foo}
-%CUR ^
-%1.1 ^^^
-"#,
- ReferenceContext {
- include_declaration: false,
- },
- )
-}
-
-#[test]
-fn string_reference_include_decl() {
- check(
- r#"
-%BIB main.bib
-%SRC @string{foo = {Foo}}
-%2.1 ^^^
-%SRC @string{bar = {Bar}}
-%SRC @article{baz, author = foo}
-%CUR ^
-%1.1 ^^^
-"#,
- ReferenceContext {
- include_declaration: true,
- },
- )
-}
-
-#[test]
-fn string_definition() {
- check(
- r#"
-%BIB main.bib
-%SRC @string{foo = {Foo}}
-%CUR ^
-%SRC @string{bar = {Bar}}
-%SRC @article{baz, author = foo}
-%1.1 ^^^
-"#,
- ReferenceContext {
- include_declaration: false,
- },
- )
-}
-
-#[test]
-fn string_definition_include_decl() {
- check(
- r#"
-%BIB main.bib
-%SRC @string{foo = {Foo}}
-%CUR ^
-%2.1 ^^^
-%SRC @string{bar = {Bar}}
-%SRC @article{baz, author = foo}
-%1.1 ^^^
-"#,
- ReferenceContext {
- include_declaration: true,
- },
- )
-}
diff --git a/support/texlab/src/tests/text_document/rename.rs b/support/texlab/src/tests/text_document/rename.rs
deleted file mode 100644
index 2bbdfb1513..0000000000
--- a/support/texlab/src/tests/text_document/rename.rs
+++ /dev/null
@@ -1,110 +0,0 @@
-use std::collections::HashMap;
-
-use lsp_types::{request::Rename, ClientCapabilities, RenameParams, TextEdit, Url, WorkspaceEdit};
-
-use crate::tests::{client::Client, fixture};
-
-fn check(fixture: &str, new_name: &str) {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- let fixture = fixture::parse(fixture);
- for file in fixture.files {
- client.open(file.name, file.lang, file.text);
- }
-
- let mut expected_changes: HashMap<Url, Vec<TextEdit>> = HashMap::new();
- for ranges in fixture.ranges.values() {
- expected_changes
- .entry(client.uri(ranges[&1].name))
- .or_default()
- .push(TextEdit::new(ranges[&1].range, new_name.to_string()));
- }
-
- let actual_edit = client
- .request::<Rename>(RenameParams {
- text_document_position: fixture.cursor.unwrap().into_params(&client),
- new_name: new_name.to_string(),
- work_done_progress_params: Default::default(),
- })
- .unwrap()
- .unwrap_or_default();
-
- client.shutdown();
-
- assert_eq!(actual_edit, WorkspaceEdit::new(expected_changes));
-}
-
-#[test]
-fn command() {
- check(
- r#"
-%TEX foo.tex
-%SRC \baz
-%CUR ^
-%1.1 ^^^
-%SRC \include{bar.tex}
-
-%TEX bar.tex
-%SRC \baz
-%2.1 ^^^
-"#,
- "qux",
- )
-}
-
-#[test]
-fn entry() {
- check(
- r#"
-%BIB main.bib
-%SRC @article{foo, bar = baz}
-%CUR ^
-%1.1 ^^^
-
-%TEX main.tex
-%SRC \addbibresource{main.bib}
-%SRC \cite{foo}
-%2.1 ^^^
-"#,
- "qux",
- )
-}
-
-#[test]
-fn citation() {
- check(
- r#"
-%BIB main.bib
-%SRC @article{foo, bar = baz}
-%1.1 ^^^
-
-%TEX main.tex
-%SRC \addbibresource{main.bib}
-%SRC \cite{foo}
-%CUR ^
-%2.1 ^^^
-"#,
- "qux",
- )
-}
-
-#[test]
-fn label() {
- check(
- r#"
-%TEX foo.tex
-%SRC \label{foo}\include{bar}
-%CUR ^
-%1.1 ^^^
-
-%TEX bar.tex
-%SRC \ref{foo}
-%2.1 ^^^
-
-%TEX baz.tex
-%SRC \ref{foo}
-"#,
- "bar",
- )
-}
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_package_ref.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_package_ref.snap
deleted file mode 100644
index 88ba06e91c..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_package_ref.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\acrodef{fpsLabel}[FPS]{Frames per Second}\n%SRC \\ac{f\n%CUR ^\n%1.1 ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "fpsLabel",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "fpsLabel"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_empty.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_empty.snap
deleted file mode 100644
index 65259d44a7..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_empty.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n%SRC \\acrshort{}\n%CUR ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "fpsLabel",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "fpsLabel"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_open_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_open_brace.snap
deleted file mode 100644
index f326640993..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_open_brace.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n%SRC \\acrshort{f\n%CUR ^\n%1.1 ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "fpsLabel",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "fpsLabel"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_simple.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_simple.snap
deleted file mode 100644
index db7adf0259..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__acronym_ref_simple.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n%SRC \\acrshort{f}\n%CUR ^\n%1.1 ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "fpsLabel",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "fpsLabel"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_empty.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_empty.snap
deleted file mode 100644
index 75a73c5e32..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_empty.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\usepackage{amsfonts}\n%SRC \\mathbb{}\n%CUR ^\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "A",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "A"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "B",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "B"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "C",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "C"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "D",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "D"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "E",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "E"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_open_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_open_brace.snap
deleted file mode 100644
index dd33c0eac3..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_open_brace.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\usepackage{amsfonts}\n%SRC \\mathbb{\n%CUR ^\n%SRC Test\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "A",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "A"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "B",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "B"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "C",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "C"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "D",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "D"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "E",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "E"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_word.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_word.snap
deleted file mode 100644
index cf88ba4b2b..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__argument_word.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\usepackage{amsfonts}\n%SRC \\mathbb{A}\n%CUR ^\n%1.1 ^\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "A",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "A"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__begin_environment_without_snippet_support.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__begin_environment_without_snippet_support.snap
deleted file mode 100644
index 167e764aef..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__begin_environment_without_snippet_support.snap
+++ /dev/null
@@ -1,62 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\beg\n%CUR ^\n%1.1 ^^^\"#)?"
----
-[
- {
- "detail": "built-in",
- "kind": 1,
- "label": "begin",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "begin"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "begingroup",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "begingroup"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "AtBeginDocument",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "AtBeginDocument"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "AtBeginDvi",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "AtBeginDvi"
- }
- },
- {
- "detail": "â‹€, built-in",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "bigwedge",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "bigwedge"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation.snap
deleted file mode 100644
index 70453476d5..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\documentclass{article}\n%SRC \\bibliography{main}\n%SRC \\begin{document}\n%SRC \\cite{\n%CUR ^\n%SRC \\end{document}\n\n%BIB main.bib\n%SRC @article{foo:2019,\n%SRC author = {Foo Bar},\n%SRC title = {Baz Qux},\n%SRC year = {2019},\n%SRC }\n%SRC \n%SRC @article{bar:2005,}\"#)?"
----
-[
- {
- "data": "[data]",
- "filterText": "bar:2005 @article bar:2005",
- "kind": 1,
- "label": "bar:2005",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "bar:2005"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "filterText": "foo:2019 @article foo:2019 author Foo Bar title Baz Qux year 2019",
- "kind": 1,
- "label": "foo:2019",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "foo:2019"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_acronym.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_acronym.snap
deleted file mode 100644
index 5cf8260317..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_acronym.snap
+++ /dev/null
@@ -1,18 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\addbibresource{main.bib}\n%SRC \\DeclareAcronym{foo}{cite={}}\n%CUR ^\n\n%BIB main.bib\n%SRC @article{foo,}\"#)?"
----
-[
- {
- "data": "[data]",
- "filterText": "foo @article foo",
- "kind": 1,
- "label": "foo",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "foo"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_open_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_open_brace.snap
deleted file mode 100644
index 3143481442..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_open_brace.snap
+++ /dev/null
@@ -1,18 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\addbibresource{main.bib}\n%SRC \\cite{\n%CUR ^\n\n%BIB main.bib\n%SRC @article{foo,}\"#)?"
----
-[
- {
- "data": "[data]",
- "filterText": "foo @article foo",
- "kind": 1,
- "label": "foo",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "foo"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_open_brace_multiple.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_open_brace_multiple.snap
deleted file mode 100644
index 21faa28ecc..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__citation_open_brace_multiple.snap
+++ /dev/null
@@ -1,18 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\addbibresource{main.bib}\n%SRC \\cite{foo,a\n%CUR ^\n%1.1 ^\n\n%BIB main.bib\n%SRC @article{foo,}\"#)?"
----
-[
- {
- "data": "[data]",
- "filterText": "foo @article foo",
- "kind": 1,
- "label": "foo",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "foo"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_open_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_open_brace.snap
deleted file mode 100644
index 825d607885..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_open_brace.snap
+++ /dev/null
@@ -1,56 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\definecolor{foo}{\n%CUR ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "HTML",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "HTML"
- }
- },
- {
- "kind": 1,
- "label": "RGB",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "RGB"
- }
- },
- {
- "kind": 1,
- "label": "cmyk",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "cmyk"
- }
- },
- {
- "kind": 1,
- "label": "gray",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "gray"
- }
- },
- {
- "kind": 1,
- "label": "rgb",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "rgb"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_set_open_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_set_open_brace.snap
deleted file mode 100644
index 27dac7d130..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_set_open_brace.snap
+++ /dev/null
@@ -1,56 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\definecolorset{\n%CUR ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "HTML",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "HTML"
- }
- },
- {
- "kind": 1,
- "label": "RGB",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "RGB"
- }
- },
- {
- "kind": 1,
- "label": "cmyk",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "cmyk"
- }
- },
- {
- "kind": 1,
- "label": "gray",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "gray"
- }
- },
- {
- "kind": 1,
- "label": "rgb",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "rgb"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_set_simple.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_set_simple.snap
deleted file mode 100644
index c2a2640786..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_set_simple.snap
+++ /dev/null
@@ -1,56 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\definecolorset{}\n%CUR ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "HTML",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "HTML"
- }
- },
- {
- "kind": 1,
- "label": "RGB",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "RGB"
- }
- },
- {
- "kind": 1,
- "label": "cmyk",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "cmyk"
- }
- },
- {
- "kind": 1,
- "label": "gray",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "gray"
- }
- },
- {
- "kind": 1,
- "label": "rgb",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "rgb"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_simple.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_simple.snap
deleted file mode 100644
index da3431986d..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_model_definition_simple.snap
+++ /dev/null
@@ -1,56 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\definecolor{foo}{}\n%CUR ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "HTML",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "HTML"
- }
- },
- {
- "kind": 1,
- "label": "RGB",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "RGB"
- }
- },
- {
- "kind": 1,
- "label": "cmyk",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "cmyk"
- }
- },
- {
- "kind": 1,
- "label": "gray",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "gray"
- }
- },
- {
- "kind": 1,
- "label": "rgb",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "rgb"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_open_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_open_brace.snap
deleted file mode 100644
index f2ae7d8db0..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_open_brace.snap
+++ /dev/null
@@ -1,56 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\color{\n%CUR ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "Apricot",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Apricot"
- }
- },
- {
- "kind": 1,
- "label": "Aquamarine",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Aquamarine"
- }
- },
- {
- "kind": 1,
- "label": "Bittersweet",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Bittersweet"
- }
- },
- {
- "kind": 1,
- "label": "Black",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Black"
- }
- },
- {
- "kind": 1,
- "label": "Blue",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Blue"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_simple.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_simple.snap
deleted file mode 100644
index fc3db2911b..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_simple.snap
+++ /dev/null
@@ -1,56 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\color{}\n%CUR ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "Apricot",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Apricot"
- }
- },
- {
- "kind": 1,
- "label": "Aquamarine",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Aquamarine"
- }
- },
- {
- "kind": 1,
- "label": "Bittersweet",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Bittersweet"
- }
- },
- {
- "kind": 1,
- "label": "Black",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Black"
- }
- },
- {
- "kind": 1,
- "label": "Blue",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Blue"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_word.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_word.snap
deleted file mode 100644
index cd671de9b9..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__color_word.snap
+++ /dev/null
@@ -1,56 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\color{re}\n%CUR ^\n%1.1 ^^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "red",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "red"
- }
- },
- {
- "kind": 1,
- "label": "Red",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "Red"
- }
- },
- {
- "kind": 1,
- "label": "RedOrange",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "RedOrange"
- }
- },
- {
- "kind": 1,
- "label": "RedViolet",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "RedViolet"
- }
- },
- {
- "kind": 1,
- "label": "BrickRed",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "BrickRed"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_bibtex.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_bibtex.snap
deleted file mode 100644
index 76dd1d07f8..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_bibtex.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @article{b, \n%SRC c = {\\LaT }\n%CUR ^\n%1.1 ^^^\n%SRC }\"#)?"
----
-[
- {
- "detail": "built-in",
- "kind": 1,
- "label": "LaTeX",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LaTeX"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "LaTeXe",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LaTeXe"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "latexreleaseversion",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "latexreleaseversion"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "LastDeclaredEncoding",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LastDeclaredEncoding"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "last",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "last"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_simple.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_simple.snap
deleted file mode 100644
index c974de42b7..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_simple.snap
+++ /dev/null
@@ -1,63 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\\n%CUR ^\"#)?"
----
-[
- {
- "detail": "built-in",
- "kind": 1,
- "label": "!",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "!"
- }
- },
- {
- "detail": "built-in",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "\"",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "\""
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "#",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "#"
- }
- },
- {
- "detail": "$, built-in",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "$",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "$"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "%",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "%"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_simple_package.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_simple_package.snap
deleted file mode 100644
index ada70e293a..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_command_simple_package.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\usepackage{lipsum}\n%SRC \\lips\n%CUR ^\n%1.1 ^^^^\"#)?"
----
-[
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "lipsum",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lipsum"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "lipsumexp",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lipsumexp"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "LipsumPar",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LipsumPar"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "LipsumProtect",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LipsumProtect"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "LipsumRestoreAll",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LipsumRestoreAll"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_class.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_class.snap
deleted file mode 100644
index bb409a442b..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_class.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\documentclass{article}\n%SRC \\begin{thein}\n%CUR ^\n%1.1 ^^^^^\"#)?"
----
-[
- {
- "detail": "article.cls",
- "kind": 1,
- "label": "theindex",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "theindex"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_command_definition.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_command_definition.snap
deleted file mode 100644
index d319eeb734..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_command_definition.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\newcommand{\\foo}{\\begin{doc}\n%CUR ^\n%1.1 ^^^\"#)?"
----
-[
- {
- "detail": "built-in",
- "kind": 1,
- "label": "document",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "document"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_simple.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_simple.snap
deleted file mode 100644
index f6b8710db3..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_simple.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\begin{doc\n%CUR ^\n%1.1 ^^^\"#)?"
----
-[
- {
- "detail": "built-in",
- "kind": 1,
- "label": "document",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "document"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_simple_end.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_simple_end.snap
deleted file mode 100644
index e3ffa551d3..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__component_environment_simple_end.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\begin{document}\n%SRC \\end{\n%CUR ^\"#)?"
----
-[
- {
- "detail": "built-in",
- "kind": 1,
- "label": "document",
- "preselect": true,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "document"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "abstract",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "abstract"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "array",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "array"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "center",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "center"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "csname",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "csname"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_after_preamble.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_after_preamble.snap
deleted file mode 100644
index 5f29c307a7..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_after_preamble.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @preamble{\n%CUR ^\n%1.1 ^^^^^^^^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "preamble",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "preamble"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_after_string.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_after_string.snap
deleted file mode 100644
index 5b18f17cfe..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_after_string.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @string{\n%CUR ^\n%1.1 ^^^^^^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "string",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "string"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_at_empty.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_at_empty.snap
deleted file mode 100644
index 7928676b92..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_at_empty.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @\n%CUR ^\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "article",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "article"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "artwork",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "artwork"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "audio",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "audio"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "bibnote",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "bibnote"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "book",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "book"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_article.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_article.snap
deleted file mode 100644
index 1522a7594a..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_article.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @article\n%CUR ^\n%1.1 ^^^^^^^\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "article",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "article"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_preamble.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_preamble.snap
deleted file mode 100644
index 50e7a2162d..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_preamble.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @preamble\n%CUR ^\n%1.1 ^^^^^^^^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "preamble",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "preamble"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_string.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_string.snap
deleted file mode 100644
index 0c00ddd5fc..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_before_string.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @string\n%CUR ^\n%1.1 ^^^^^^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "string",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "string"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_complete_entry.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_complete_entry.snap
deleted file mode 100644
index 6afb028f95..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__entry_type_complete_entry.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @article{foo, author = {foo}}\n%CUR ^\n%1.1 ^^^^^^^\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "article",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "article"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_empty_entry_closed.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_empty_entry_closed.snap
deleted file mode 100644
index 86a6e06c89..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_empty_entry_closed.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @article{foo,}\n%CUR ^\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "abstract",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "abstract"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "addendum",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "addendum"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "address",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "address"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "afterword",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "afterword"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "annotation",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "annotation"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_empty_entry_open.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_empty_entry_open.snap
deleted file mode 100644
index 75a242d25d..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_empty_entry_open.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @article{foo,\n%CUR ^\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "abstract",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "abstract"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "addendum",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "addendum"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "address",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "address"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "afterword",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "afterword"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "annotation",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "annotation"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_field_name.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_field_name.snap
deleted file mode 100644
index 3178da8d07..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_field_name.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @article{foo, a\n%CUR ^\n%1.1 ^\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "abstract",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "abstract"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "addendum",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "addendum"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "address",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "address"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "afterword",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "afterword"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "annotation",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "annotation"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_two_fields_name_closed.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_two_fields_name_closed.snap
deleted file mode 100644
index 80595edf98..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_two_fields_name_closed.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @article{foo, author = bar, edit}\n%CUR ^\n%1.1 ^^^^\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "edition",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "edition"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "editor",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "editor"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "editora",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "editora"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "editoratype",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "editoratype"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "editorb",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "editorb"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_two_fields_name_open.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_two_fields_name_open.snap
deleted file mode 100644
index 8de75313e8..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__field_entry_two_fields_name_open.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%BIB main.bib\n%SRC @article{foo, author = bar, edit\n%CUR ^\n%1.1 ^^^^\"#)?"
----
-[
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "edition",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "edition"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "editor",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "editor"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "editora",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "editora"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "editoratype",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "editoratype"
- }
- },
- {
- "documentation": "[documentation]",
- "kind": 1,
- "label": "editorb",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "editorb"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__glossary_ref_open_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__glossary_ref_open_brace.snap
deleted file mode 100644
index 36a77e92e5..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__glossary_ref_open_brace.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n%SRC \\gls{f\n%CUR ^\n%1.1 ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "fpsLabel",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "fpsLabel"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__glossary_ref_simple.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__glossary_ref_simple.snap
deleted file mode 100644
index 7a4d9a584b..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__glossary_ref_simple.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n%SRC \\gls{f}\n%CUR ^\n%1.1 ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "fpsLabel",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "fpsLabel"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_class_closed_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_class_closed_brace.snap
deleted file mode 100644
index f346f67f41..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_class_closed_brace.snap
+++ /dev/null
@@ -1,66 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\documentclass{art}\n%CUR ^\n%1.1 ^^^\"#)?"
----
-[
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "article",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "article"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "articleingud",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "articleingud"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "articoletteracdp",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "articoletteracdp"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "artikel1",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "artikel1"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "artikel2",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "artikel2"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_class_open_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_class_open_brace.snap
deleted file mode 100644
index 0d236ae496..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_class_open_brace.snap
+++ /dev/null
@@ -1,66 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\documentclass{art \\foo\n%CUR ^\n%1.1 ^^^\"#)?"
----
-[
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "article",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "article"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "articleingud",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "articleingud"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "articoletteracdp",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "articoletteracdp"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "artikel1",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "artikel1"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "artikel2",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "artikel2"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_package_closed_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_package_closed_brace.snap
deleted file mode 100644
index 2952c5d401..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_package_closed_brace.snap
+++ /dev/null
@@ -1,66 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\usepackage{lips}\n%CUR ^\n%1.1 ^^^^\"#)?"
----
-[
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "lips",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lips"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "lipsum",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lipsum"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "lisp-simple-alloc",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lisp-simple-alloc"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "lisp-string",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lisp-string"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "lwarp-lips",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lwarp-lips"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_package_open_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_package_open_brace.snap
deleted file mode 100644
index 349830d5f2..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__import_package_open_brace.snap
+++ /dev/null
@@ -1,66 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\usepackage{lips\n%CUR ^\n%1.1 ^^^^\"#)?"
----
-[
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "lips",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lips"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "lipsum",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lipsum"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "lisp-simple-alloc",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lisp-simple-alloc"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "lisp-string",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lisp-string"
- }
- },
- {
- "data": "[data]",
- "documentation": "[documentation]",
- "kind": 1,
- "label": "lwarp-lips",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lwarp-lips"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__label.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__label.snap
deleted file mode 100644
index a4b26aa41d..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__label.snap
+++ /dev/null
@@ -1,67 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX foo.tex\n%SRC \\documentclass{article}\n%SRC \n%SRC \\usepackage{amsmath}\n%SRC \\usepackage{caption}\n%SRC \\usepackage{amsthm}\n%SRC \\newtheorem{lemma}{Lemma}\n%SRC \n%SRC \\begin{document}\n%SRC \n%SRC \\section{Foo}%\n%SRC \\label{sec:foo}\n%SRC \n%SRC \\begin{equation}%\n%SRC \\label{eq:foo}\n%SRC 1 + 1 = 2\n%SRC \\end{equation}\n%SRC \n%SRC \\begin{equation}%\n%SRC \\label{eq:bar}\n%SRC 1 + 1 = 2\n%SRC \\end{equation}\n%SRC \n%SRC \\begin{figure}%\n%SRC \\LaTeX{}\n%SRC \\caption{Baz}%\n%SRC \\label{fig:baz}\n%SRC \\end{figure}\n%SRC \n%SRC \\begin{lemma}%\n%SRC \\label{thm:foo}\n%SRC 1 + 1 = 2\n%SRC \\end{lemma}\n%SRC \n%SRC \\include{bar}\n%SRC \n%SRC \\end{document}\n\n%TEX bar.tex\n%SRC \\section{Bar}%\n%SRC \\label{sec:bar}\n%SRC \n%SRC Lorem ipsum dolor sit amet.\n%SRC \\ref{}\n%CUR ^\n\n%TEX foo.aux\n%SRC \\relax\n%SRC \\@writefile{lof}{\\contentsline {figure}{\\numberline {1}{\\ignorespaces Baz\\relax }}{1}\\protected@file@percent }\n%SRC \\providecommand*\\caption@xref[2]{\\@setref\\relax\\@undefined{#1}}\n%SRC \\newlabel{fig:baz}{{1}{1}}\n%SRC \\@writefile{toc}{\\contentsline {section}{\\numberline {1}Foo}{1}\\protected@file@percent }\n%SRC \\newlabel{sec:foo}{{1}{1}}\n%SRC \\newlabel{eq:foo}{{1}{1}}\n%SRC \\newlabel{eq:bar}{{2}{1}}\n%SRC \\newlabel{thm:foo}{{1}{1}}\n%SRC \\@input{bar.aux}\"#)?"
----
-[
- {
- "detail": "Equation (2)",
- "filterText": "eq:bar Equation (2)",
- "kind": 1,
- "label": "eq:bar",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "eq:bar"
- }
- },
- {
- "detail": "Equation (1)",
- "filterText": "eq:foo Equation (1)",
- "kind": 1,
- "label": "eq:foo",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "eq:foo"
- }
- },
- {
- "detail": "Figure 1",
- "documentation": "[documentation]",
- "filterText": "fig:baz Figure 1: Baz",
- "kind": 1,
- "label": "fig:baz",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "fig:baz"
- }
- },
- {
- "detail": "Section (Bar)",
- "filterText": "sec:bar Section (Bar)",
- "kind": 1,
- "label": "sec:bar",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "sec:bar"
- }
- },
- {
- "detail": "Section 1 (Foo)",
- "filterText": "sec:foo Section 1 (Foo)",
- "kind": 1,
- "label": "sec:foo",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "sec:foo"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_import.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_import.snap
deleted file mode 100644
index 5ee9c3c207..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_import.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\documentclass{article}\n%SRC \\import{sub}{sub/sub.tex}\n%SRC \\lipsu\n%CUR ^\n%1.1 ^^^^^\n\n%TEX sub/sub.tex\n%SRC \\input{child.tex}\n\n%TEX sub/child.tex\n%SRC \\usepackage{lipsum}\n\n\"#)"
----
-[
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "lipsum",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lipsum"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "lipsumexp",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lipsumexp"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "LipsumPar",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LipsumPar"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "LipsumProtect",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LipsumProtect"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "LipsumRestoreAll",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LipsumRestoreAll"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_texlabroot.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_texlabroot.snap
deleted file mode 100644
index ecf093e33c..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__project_resolution_texlabroot.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX src/main.tex\n%SRC \\documentclass{article}\n%SRC \\include{src/foo}\n%SRC \\lipsu\n%CUR ^\n%1.1 ^^^^^\n\n%TEX src/foo.tex\n%SRC \\include{src/bar}\n\n%TEX src/bar.tex\n%SRC \\usepackage{lipsum}\n\n%ROOT .texlabroot\n\"#)"
----
-[
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "lipsum",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lipsum"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "lipsumexp",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lipsumexp"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "LipsumPar",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LipsumPar"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "LipsumProtect",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LipsumProtect"
- }
- },
- {
- "detail": "lipsum.sty",
- "kind": 1,
- "label": "LipsumRestoreAll",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "LipsumRestoreAll"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__theorem_begin.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__theorem_begin.snap
deleted file mode 100644
index a4de708b1b..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__theorem_begin.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\newtheorem{lemma}{Lemma}\n%SRC \\begin{lem \n%CUR ^\n%1.1 ^^^\"#)?"
----
-[
- {
- "detail": "user-defined",
- "kind": 1,
- "label": "lemma",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lemma"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__theorem_end.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__theorem_end.snap
deleted file mode 100644
index 0c2c20083e..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__theorem_end.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\newtheorem{lemma}{Lemma}\n%SRC \\begin{}\n%SRC \\end{lem\n%CUR ^\n%1.1 ^^^\"#)?"
----
-[
- {
- "detail": "user-defined",
- "kind": 1,
- "label": "lemma",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "lemma"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__tikz_library_closed_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__tikz_library_closed_brace.snap
deleted file mode 100644
index f2a00d22bb..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__tikz_library_closed_brace.snap
+++ /dev/null
@@ -1,56 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\usepgflibrary{}\n%CUR ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "arrows",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "arrows"
- }
- },
- {
- "kind": 1,
- "label": "arrows.meta",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "arrows.meta"
- }
- },
- {
- "kind": 1,
- "label": "arrows.spaced",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "arrows.spaced"
- }
- },
- {
- "kind": 1,
- "label": "curvilinear",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "curvilinear"
- }
- },
- {
- "kind": 1,
- "label": "datavisualization.barcharts",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "datavisualization.barcharts"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__tikz_library_open_brace.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__tikz_library_open_brace.snap
deleted file mode 100644
index 62bb3729b7..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__tikz_library_open_brace.snap
+++ /dev/null
@@ -1,56 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\usepgflibrary{\n%CUR ^\"#)?"
----
-[
- {
- "kind": 1,
- "label": "arrows",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "arrows"
- }
- },
- {
- "kind": 1,
- "label": "arrows.meta",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "arrows.meta"
- }
- },
- {
- "kind": 1,
- "label": "arrows.spaced",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "arrows.spaced"
- }
- },
- {
- "kind": 1,
- "label": "curvilinear",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "curvilinear"
- }
- },
- {
- "kind": 1,
- "label": "datavisualization.barcharts",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "datavisualization.barcharts"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__user_command.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__user_command.snap
deleted file mode 100644
index fe0a397706..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__user_command.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\foobar\n%SRC \\fooba\n%CUR ^\n%1.1 ^^^^^\n%SRC \\begin{foo}\n%SRC \\end{foo}\n%SRC \\begin{fo}\n\"#)?"
----
-[
- {
- "detail": "user-defined",
- "kind": 1,
- "label": "foobar",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "foobar"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__user_environment.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__user_environment.snap
deleted file mode 100644
index 7230e9a951..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__completion__user_environment.snap
+++ /dev/null
@@ -1,28 +0,0 @@
----
-source: src/tests/text_document/completion.rs
-expression: "complete(r#\"\n%TEX main.tex\n%SRC \\foobar\n%SRC \\fooba\n%SRC \\begin{foo}\n%SRC \\end{foo}\n%SRC \\begin{fo}\n%CUR ^\n%1.1 ^^\n\"#)?"
----
-[
- {
- "detail": "user-defined",
- "kind": 1,
- "label": "foo",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "foo"
- }
- },
- {
- "detail": "built-in",
- "kind": 1,
- "label": "filecontents",
- "preselect": false,
- "sortText": "[sortText]",
- "textEdit": {
- "range": "[range]",
- "newText": "filecontents"
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__did_change_configuration__invalid_configuration.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__did_change_configuration__invalid_configuration.snap
deleted file mode 100644
index 1400d80167..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__did_change_configuration__invalid_configuration.snap
+++ /dev/null
@@ -1,9 +0,0 @@
----
-source: src/tests/text_document/did_change_configuration.rs
-expression: message
----
-The texlab configuration is invalid; using the default settings instead.
-Details: regex parse error:
- \
- ^
-error: incomplete escape sequence, reached end of pattern prematurely
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__float_flat.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__float_flat.snap
deleted file mode 100644
index 3d2537d85b..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__float_flat.snap
+++ /dev/null
@@ -1,60 +0,0 @@
----
-source: src/tests/text_document/document_symbol.rs
-expression: result.response
----
-[
- {
- "name": "Figure: Foo",
- "kind": 6,
- "deprecated": false,
- "location": {
- "uri": "[tmp]/main.tex",
- "range": {
- "start": {
- "line": 4,
- "character": 0
- },
- "end": {
- "line": 7,
- "character": 12
- }
- }
- }
- },
- {
- "name": "Figure: Bar",
- "kind": 6,
- "deprecated": false,
- "location": {
- "uri": "[tmp]/main.tex",
- "range": {
- "start": {
- "line": 9,
- "character": 0
- },
- "end": {
- "line": 12,
- "character": 12
- }
- }
- }
- },
- {
- "name": "Figure: Baz",
- "kind": 6,
- "deprecated": false,
- "location": {
- "uri": "[tmp]/main.tex",
- "range": {
- "start": {
- "line": 14,
- "character": 0
- },
- "end": {
- "line": 17,
- "character": 12
- }
- }
- }
- }
-]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_command.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_command.snap
deleted file mode 100644
index c7d1491245..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_command.snap
+++ /dev/null
@@ -1,8 +0,0 @@
----
-source: src/tests/text_document/formatting.rs
-expression: "format(r#\"\n%BIB main.bib\n%SRC @article{foo, bar = \"\\baz\",}\"#)?"
----
-@article{foo,
- bar = "\baz",
-}
-
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_insert_braces.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_insert_braces.snap
deleted file mode 100644
index d05b077188..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_insert_braces.snap
+++ /dev/null
@@ -1,7 +0,0 @@
----
-source: src/tests/text_document/formatting.rs
-expression: "format(r#\"\n%BIB main.bib\n%SRC @article{foo, bar = baz,\"#)?"
----
-@article{foo,
- bar = baz,
-}
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_join_strings.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_join_strings.snap
deleted file mode 100644
index 8fb3765129..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_join_strings.snap
+++ /dev/null
@@ -1,8 +0,0 @@
----
-source: src/tests/text_document/formatting.rs
-expression: "format(r#\"\n%BIB main.bib\n%SRC @article{foo, bar = \"baz\" # \"qux\"}\"#)?"
----
-@article{foo,
- bar = "baz" # "qux",
-}
-
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_multiple_entries.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_multiple_entries.snap
deleted file mode 100644
index 2496f9b5e5..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_multiple_entries.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: src/tests/text_document/formatting.rs
-expression: "format(r#\"\n%BIB main.bib\n%SRC @article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, \n%SRC consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}\n%SRC \n%SRC @article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, \n%SRC consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}\"\"#)?"
----
-@article{foo,
- bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
- dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
- amet, consectetur adipiscing elit.},
-}
-
-@article{foo,
- bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
- dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
- amet, consectetur adipiscing elit.},
-}"
-
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_parens.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_parens.snap
deleted file mode 100644
index 883b97b375..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_parens.snap
+++ /dev/null
@@ -1,7 +0,0 @@
----
-source: src/tests/text_document/formatting.rs
-expression: "format(r#\"\n%BIB main.bib\n%SRC @article(foo,)\"#)?"
----
-@article{foo,
-}
-
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_preamble.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_preamble.snap
deleted file mode 100644
index fdac219c35..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_preamble.snap
+++ /dev/null
@@ -1,6 +0,0 @@
----
-source: src/tests/text_document/formatting.rs
-expression: "format(r#\"\n%BIB main.bib\n%SRC @preamble{\n%SRC \"foo bar baz\" }\"#)?"
----
-@preamble{"foo bar baz"}
-
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_string.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_string.snap
deleted file mode 100644
index 8f9589773e..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_string.snap
+++ /dev/null
@@ -1,6 +0,0 @@
----
-source: src/tests/text_document/formatting.rs
-expression: "format(r#\"\n%BIB main.bib\n%SRC @string{foo=\"bar\"}\"#)?"
----
-@string{foo = "bar"}
-
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_trailing_comma.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_trailing_comma.snap
deleted file mode 100644
index 1051e00cf3..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_trailing_comma.snap
+++ /dev/null
@@ -1,8 +0,0 @@
----
-source: src/tests/text_document/formatting.rs
-expression: "format(r#\"\n%BIB main.bib\n%SRC @article{foo, bar = baz}\"#)?"
----
-@article{foo,
- bar = baz,
-}
-
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_wrap_long_lines.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_wrap_long_lines.snap
deleted file mode 100644
index e7e1f39386..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__formatting__bibtex_internal_wrap_long_lines.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: src/tests/text_document/formatting.rs
-expression: "format(r#\"\n%BIB main.bib\n%SRC @article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n%SRC Lorem ipsum dolor sit amet,\n%SRC consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}\"#)?"
----
-@article{foo,
- bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
- dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
- amet, consectetur adipiscing elit.},
-}
-
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__inlay_hint__label_definition.snap b/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__inlay_hint__label_definition.snap
deleted file mode 100644
index ff04d65efb..0000000000
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__inlay_hint__label_definition.snap
+++ /dev/null
@@ -1,38 +0,0 @@
----
-source: src/tests/text_document/inlay_hint.rs
-expression: "check(r#\"\n%TEX main.tex\n%SRC \\documentclass{article}\n%SRC \\usepackage{caption}\n%SRC \\begin{document}\n%SRC \\section{Foo}\\label{sec:foo}\n%SRC \\section{Bar}\\label{sec:bar}\n%SRC \\subsection{Baz}\\label{sec:baz}\n%SRC \\begin{figure}\n%SRC Test\n%SRC \\label{fig:qux}\n%SRC \\caption{Qux}\n%SRC \\end{figure}\n%SRC \\end{document}\n\n%TEX main.aux\n%SRC \\relax \n%SRC \\providecommand*\\caption@xref[2]{\\@setref\\relax\\@undefined{#1}}\n%SRC \\newlabel{fig:qux}{{\\caption@xref {fig:qux}{ on input line 15}}{1}}\n%SRC \\@writefile{lof}{\\contentsline {figure}{\\numberline {1}{\\ignorespaces Qux\\relax }}{1}{}\\protected@file@percent }\n%SRC \\@writefile{toc}{\\contentsline {section}{\\numberline {1}Foo}{1}{}\\protected@file@percent }\n%SRC \\newlabel{sec:foo}{{1}{1}}\n%SRC \\@writefile{toc}{\\contentsline {section}{\\numberline {2}Bar}{1}{}\\protected@file@percent }\n%SRC \\newlabel{sec:bar}{{2}{1}}\n%SRC \\@writefile{toc}{\\contentsline {subsection}{\\numberline {2.1}Baz}{1}{}\\protected@file@percent }\n%SRC \\newlabel{sec:baz}{{2.1}{1}}\n%SRC \\gdef \\@abspage@last{1}\n\"#)?"
----
-[
- {
- "position": {
- "line": 3,
- "character": 27
- },
- "label": "Section 1 (Foo)",
- "paddingLeft": true
- },
- {
- "position": {
- "line": 4,
- "character": 27
- },
- "label": "Section 2 (Bar)",
- "paddingLeft": true
- },
- {
- "position": {
- "line": 5,
- "character": 30
- },
- "label": "Subsection 2.1 (Baz)",
- "paddingLeft": true
- },
- {
- "position": {
- "line": 8,
- "character": 18
- },
- "label": "Figure fig:qux: Qux",
- "paddingLeft": true
- }
-]
diff --git a/support/texlab/src/tests/workspace/symbol.rs b/support/texlab/src/tests/workspace/symbol.rs
deleted file mode 100644
index 626cce3c0b..0000000000
--- a/support/texlab/src/tests/workspace/symbol.rs
+++ /dev/null
@@ -1,142 +0,0 @@
-use insta::{assert_json_snapshot, internals::Redaction};
-use lsp_types::{
- request::WorkspaceSymbol, ClientCapabilities, SymbolInformation, Url, WorkspaceSymbolParams,
-};
-
-use crate::tests::{client::Client, fixture};
-
-struct SymbolResult {
- actual_symbols: Vec<SymbolInformation>,
- uri_redaction: Redaction,
-}
-
-fn find_symbols(fixture: &str, query: &str) -> SymbolResult {
- let mut client = Client::spawn();
- client.initialize(ClientCapabilities::default(), None);
-
- let fixture = fixture::parse(fixture);
- for file in fixture.files {
- client.open(file.name, file.lang, file.text);
- }
-
- let actual_symbols = client
- .request::<WorkspaceSymbol>(WorkspaceSymbolParams {
- query: query.to_string(),
- work_done_progress_params: Default::default(),
- partial_result_params: Default::default(),
- })
- .unwrap()
- .unwrap_or_default();
-
- let result = client.shutdown();
-
- let uri = Url::from_directory_path(result.directory.path()).unwrap();
- let uri_redaction = insta::dynamic_redaction(move |content, _path| {
- content.as_str().unwrap().replace(uri.as_str(), "[tmp]/")
- });
-
- SymbolResult {
- actual_symbols,
- uri_redaction,
- }
-}
-
-macro_rules! assert_symbols {
- ($result:expr) => {
- let result = $result;
- assert_json_snapshot!(result.actual_symbols, {
- "[].location.uri" => result.uri_redaction,
- "[]" => insta::sorted_redaction()
- });
- };
-}
-
-const FIXTURE: &str = r#"
-%TEX main.tex
-%SRC \documentclass{article}
-%SRC \usepackage{caption}
-%SRC \usepackage{amsmath}
-%SRC \usepackage{amsthm}
-%SRC
-%SRC \begin{document}
-%SRC
-%SRC \section{Foo}\label{sec:foo}
-%SRC
-%SRC \begin{equation}\label{eq:foo}
-%SRC Foo
-%SRC \end{equation}
-%SRC
-%SRC \section{Bar}\label{sec:bar}
-%SRC
-%SRC \begin{figure}
-%SRC Bar
-%SRC \caption{Bar}
-%SRC \label{fig:bar}
-%SRC \end{figure}
-%SRC
-%SRC \section{Baz}\label{sec:baz}
-%SRC
-%SRC \begin{enumerate}
-%SRC \item\label{itm:foo} Foo
-%SRC \item\label{itm:bar} Bar
-%SRC \item\label{itm:baz} Baz
-%SRC \end{enumerate}
-%SRC
-%SRC \section{Qux}\label{sec:qux}
-%SRC
-%SRC \newtheorem{lemma}{Lemma}
-%SRC
-%SRC \begin{lemma}[Qux]\label{thm:qux}
-%SRC Qux
-%SRC \end{lemma}
-%SRC
-%SRC \end{document}
-
-%TEX main.aux
-%SRC \relax
-%SRC \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Bar\relax }}{1}\protected@file@percent }
-%SRC \providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
-%SRC \newlabel{fig:bar}{{1}{1}}
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
-%SRC \newlabel{sec:foo}{{1}{1}}
-%SRC \newlabel{eq:foo}{{1}{1}}
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
-%SRC \newlabel{sec:bar}{{2}{1}}
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {3}Baz}{1}\protected@file@percent }
-%SRC \newlabel{sec:baz}{{3}{1}}
-%SRC \newlabel{itm:foo}{{1}{1}}
-%SRC \newlabel{itm:bar}{{2}{1}}
-%SRC \newlabel{itm:baz}{{3}{1}}
-%SRC \@writefile{toc}{\contentsline {section}{\numberline {4}Qux}{1}\protected@file@percent }
-%SRC \newlabel{sec:qux}{{4}{1}}
-%SRC \newlabel{thm:qux}{{1}{1}}
-
-%BIB main.bib
-%SRC @article{foo,}
-%SRC
-%SRC @string{bar = "bar"}"#;
-
-#[test]
-fn filter_type_section() {
- assert_symbols!(find_symbols(FIXTURE, "section"));
-}
-
-#[test]
-fn filter_type_figure() {
- assert_symbols!(find_symbols(FIXTURE, "figure"));
-}
-
-#[test]
-fn filter_type_item() {
- assert_symbols!(find_symbols(FIXTURE, "item"));
-}
-
-#[test]
-fn filter_type_math() {
- assert_symbols!(find_symbols(FIXTURE, "math"));
-}
-
-#[test]
-fn filter_bibtex() {
- assert_symbols!(find_symbols(FIXTURE, "bibtex"));
-}
diff --git a/support/texlab/src/util.rs b/support/texlab/src/util.rs
index 1c4d55a19d..6f27305f1b 100644
--- a/support/texlab/src/util.rs
+++ b/support/texlab/src/util.rs
@@ -7,9 +7,10 @@ pub mod lang_data;
pub mod line_index;
pub mod line_index_ext;
pub mod lsp_enums;
+pub mod regex_filter;
use std::path::PathBuf;
use once_cell::sync::Lazy;
-pub static HOME_DIR: Lazy<Option<PathBuf>> = Lazy::new(|| dirs::home_dir());
+pub static HOME_DIR: Lazy<Option<PathBuf>> = Lazy::new(dirs::home_dir);
diff --git a/support/texlab/src/util/chktex.rs b/support/texlab/src/util/chktex.rs
index 29a7ac5630..d87eff5f9c 100644
--- a/support/texlab/src/util/chktex.rs
+++ b/support/texlab/src/util/chktex.rs
@@ -49,7 +49,7 @@ impl Command {
pub fn run(self) -> std::io::Result<Vec<Diagnostic>> {
let mut child = std::process::Command::new("chktex")
- .args(&["-I0", "-f%l:%c:%d:%k:%n:%m\n"])
+ .args(["-I0", "-f%l:%c:%d:%k:%n:%m\n"])
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.stderr(Stdio::null())
diff --git a/support/texlab/src/util/label.rs b/support/texlab/src/util/label.rs
index f0fae34337..50e2ea21e7 100644
--- a/support/texlab/src/util/label.rs
+++ b/support/texlab/src/util/label.rs
@@ -209,7 +209,7 @@ fn render_label_enum_item(
.label()
.and_then(|label| label.content_text())
.map(|text| Word::new(db, text))
- .or_else(|| number),
+ .or(number),
object: LabeledObject::EnumItem,
})
}
diff --git a/support/texlab/src/util/regex_filter.rs b/support/texlab/src/util/regex_filter.rs
new file mode 100644
index 0000000000..f107ea16fe
--- /dev/null
+++ b/support/texlab/src/util/regex_filter.rs
@@ -0,0 +1,24 @@
+use crate::RegexPattern;
+
+pub fn filter(
+ text: &str,
+ allowed_patterns: &[RegexPattern],
+ ignored_patterns: &[RegexPattern],
+) -> bool {
+ if !allowed_patterns.is_empty()
+ && !allowed_patterns
+ .iter()
+ .any(|pattern| pattern.0.is_match(text))
+ {
+ return false;
+ }
+
+ if ignored_patterns
+ .iter()
+ .any(|pattern| pattern.0.is_match(text))
+ {
+ return false;
+ }
+
+ true
+}
diff --git a/support/texlab/tests/lsp/fixture.rs b/support/texlab/tests/lsp/fixture.rs
new file mode 100644
index 0000000000..182c5d40b8
--- /dev/null
+++ b/support/texlab/tests/lsp/fixture.rs
@@ -0,0 +1,249 @@
+use std::{
+ path::{Path, PathBuf},
+ thread::JoinHandle,
+};
+
+use anyhow::Result;
+use lsp_server::Connection;
+use lsp_types::{
+ notification::{DidOpenTextDocument, Exit, Initialized},
+ request::{Initialize, Shutdown},
+ ClientCapabilities, DidOpenTextDocumentParams, InitializeParams, InitializedParams, Location,
+ Position, Range, TextDocumentIdentifier, TextDocumentItem, TextDocumentPositionParams, Url,
+};
+use tempfile::{tempdir, TempDir};
+use texlab::{db::Language, LspClient, Server};
+
+#[derive(Debug)]
+pub struct Fixture {
+ pub documents: Vec<Document>,
+}
+
+impl Fixture {
+ pub fn parse(input: &str) -> Fixture {
+ let mut documents = Vec::new();
+
+ let mut start = 0;
+ for end in input
+ .match_indices("%!")
+ .skip(1)
+ .map(|(i, _)| i)
+ .chain(std::iter::once(input.len()))
+ {
+ documents.push(Document::parse(&input[start..end]));
+ start = end;
+ }
+
+ Self { documents }
+ }
+
+ pub fn setup(&self, client: &LspClient, dir: &Path) -> Result<()> {
+ for document in &self.documents {
+ let text = String::from(&document.text);
+ let path = dir.join(&document.path);
+ std::fs::create_dir_all(path.parent().unwrap())?;
+ std::fs::write(&path, &text)?;
+
+ let uri = Url::from_file_path(&path).unwrap();
+ let language = Language::from_path(&path).unwrap_or(Language::Tex);
+ let language_id = String::from(match language {
+ Language::Tex => "latex",
+ Language::Bib => "bibtex",
+ Language::Log | Language::TexlabRoot | Language::Tectonic => continue,
+ });
+
+ client.send_notification::<DidOpenTextDocument>(DidOpenTextDocumentParams {
+ text_document: TextDocumentItem::new(uri, language_id, 0, text),
+ })?;
+ }
+
+ Ok(())
+ }
+}
+
+#[derive(Debug)]
+pub struct Document {
+ pub path: PathBuf,
+ pub text: String,
+ pub cursor: Option<Position>,
+ pub ranges: Vec<Range>,
+}
+
+impl Document {
+ pub fn parse(input: &str) -> Self {
+ let mut lines = Vec::new();
+
+ let (path, input) = input
+ .trim()
+ .strip_prefix("%! ")
+ .map(|input| input.split_once('\n').unwrap_or((input, "")))
+ .unwrap();
+
+ let mut ranges = Vec::new();
+ let mut cursor = None;
+
+ for line in input.lines().map(|line| line.trim_end()) {
+ if line.chars().all(|c| matches!(c, ' ' | '^' | '|' | '!')) && !line.is_empty() {
+ let index = (lines.len() - 1) as u32;
+
+ cursor = cursor.or_else(|| {
+ let character = line.find('|')?;
+ Some(Position::new(index, character as u32))
+ });
+
+ if let Some(start) = line.find('!') {
+ let position = Position::new(index, start as u32);
+ ranges.push(Range::new(position, position));
+ }
+
+ if let Some(start) = line.find('^') {
+ let end = line.rfind('^').unwrap() + 1;
+ ranges.push(Range::new(
+ Position::new(index, start as u32),
+ Position::new(index, end as u32),
+ ));
+ }
+ } else {
+ lines.push(line);
+ }
+ }
+
+ Self {
+ path: PathBuf::from(path),
+ text: lines.join("\n"),
+ cursor,
+ ranges,
+ }
+ }
+}
+
+#[derive(Debug)]
+pub struct TestBed {
+ fixture: Fixture,
+ locations: Vec<Location>,
+ directory: TempDir,
+ client: LspClient,
+ client_thread: Option<JoinHandle<()>>,
+ server_thread: Option<JoinHandle<()>>,
+}
+
+impl Drop for TestBed {
+ fn drop(&mut self) {
+ let _ = self.client.send_request::<Shutdown>(());
+ let _ = self.client.send_notification::<Exit>(());
+ self.client_thread.take().unwrap().join().unwrap();
+ self.server_thread.take().unwrap().join().unwrap();
+ }
+}
+
+impl TestBed {
+ pub fn new(fixture: &str) -> Result<Self> {
+ let fixture = Fixture::parse(fixture);
+ let (server_conn, client_conn) = Connection::memory();
+
+ let client = LspClient::new(client_conn.sender);
+
+ let server_thread = std::thread::spawn(move || Server::new(server_conn).run().unwrap());
+ let client_thread = {
+ let client = client.clone();
+ std::thread::spawn(move || {
+ for message in &client_conn.receiver {
+ match message {
+ lsp_server::Message::Request(request) => {
+ client
+ .send_error(
+ request.id,
+ lsp_server::ErrorCode::MethodNotFound.into(),
+ "Method not found".into(),
+ )
+ .unwrap();
+ }
+ lsp_server::Message::Response(response) => {
+ client.recv_response(response).unwrap();
+ }
+ lsp_server::Message::Notification(_) => {}
+ }
+ }
+ })
+ };
+
+ let directory = tempdir()?;
+ let locations = fixture
+ .documents
+ .iter()
+ .flat_map(|document| {
+ let uri = Url::from_file_path(directory.path().join(&document.path)).unwrap();
+ document
+ .ranges
+ .iter()
+ .map(move |range| Location::new(uri.clone(), *range))
+ })
+ .collect();
+
+ Ok(TestBed {
+ fixture,
+ locations,
+ directory,
+ client,
+ client_thread: Some(client_thread),
+ server_thread: Some(server_thread),
+ })
+ }
+
+ pub fn initialize(&self, capabilities: ClientCapabilities) -> Result<()> {
+ self.client.send_request::<Initialize>(InitializeParams {
+ capabilities,
+ initialization_options: Some(serde_json::json!({ "skipDistro": true })),
+ ..Default::default()
+ })?;
+
+ self.client
+ .send_notification::<Initialized>(InitializedParams {})?;
+
+ self.fixture.setup(&self.client, &self.directory.path())?;
+ Ok(())
+ }
+
+ pub fn client(&self) -> &LspClient {
+ &self.client
+ }
+
+ pub fn cursor(&self) -> Option<TextDocumentPositionParams> {
+ let (document, cursor) = self
+ .fixture
+ .documents
+ .iter()
+ .find_map(|document| document.cursor.map(|cursor| (document, cursor)))?;
+
+ let uri = Url::from_file_path(self.directory.path().join(&document.path)).unwrap();
+ let id = TextDocumentIdentifier::new(uri);
+ Some(TextDocumentPositionParams::new(id, cursor))
+ }
+
+ pub fn locations(&self) -> &[Location] {
+ &self.locations
+ }
+
+ pub fn directory(&self) -> &Path {
+ self.directory.path()
+ }
+
+ pub fn documents(&self) -> &[Document] {
+ &self.fixture.documents
+ }
+
+ pub fn redact(&self, uri: &Url) -> Url {
+ let root = if cfg!(windows) {
+ PathBuf::from("C:/")
+ } else {
+ PathBuf::from("/")
+ };
+
+ let path = uri.to_file_path().unwrap();
+ let path = path.strip_prefix(self.directory()).unwrap_or(&path);
+ let path = root.join(path);
+
+ let uri = Url::from_file_path(path).unwrap();
+ Url::parse(&uri.as_str().replace("file:///C:/", "file:///")).unwrap()
+ }
+}
diff --git a/support/texlab/tests/lsp/main.rs b/support/texlab/tests/lsp/main.rs
new file mode 100644
index 0000000000..aeb4f8993c
--- /dev/null
+++ b/support/texlab/tests/lsp/main.rs
@@ -0,0 +1,3 @@
+mod fixture;
+mod text_document;
+mod workspace;
diff --git a/support/texlab/src/tests/text_document.rs b/support/texlab/tests/lsp/text_document.rs
index aac0553ec4..cfab1d04c8 100644
--- a/support/texlab/src/tests/text_document.rs
+++ b/support/texlab/tests/lsp/text_document.rs
@@ -1,6 +1,5 @@
mod completion;
mod definition;
-mod did_change_configuration;
mod document_highlight;
mod document_link;
mod document_symbol;
diff --git a/support/texlab/tests/lsp/text_document/completion.rs b/support/texlab/tests/lsp/text_document/completion.rs
new file mode 100644
index 0000000000..7e0c3c31d4
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/completion.rs
@@ -0,0 +1,821 @@
+use insta::assert_json_snapshot;
+use itertools::Itertools;
+use lsp_types::{
+ request::{Completion, ResolveCompletionItem},
+ CompletionItem, CompletionParams, CompletionResponse, CompletionTextEdit, Range,
+};
+
+use crate::fixture::TestBed;
+
+fn complete(fixture: &str) -> Vec<CompletionItem> {
+ let test_bed = TestBed::new(fixture).unwrap();
+ test_bed
+ .initialize(
+ serde_json::from_value(serde_json::json!({
+ "textDocument": {
+ "completion": {
+ "completionItem": {
+ "documentationFormat": ["plaintext", "markdown"]
+ }
+ }
+ }
+ }))
+ .unwrap(),
+ )
+ .unwrap();
+
+ let text_document_position = test_bed.cursor().unwrap();
+ let position = text_document_position.position;
+ let range = test_bed
+ .locations()
+ .first()
+ .map_or_else(|| Range::new(position, position), |location| location.range);
+
+ let items = match test_bed
+ .client()
+ .send_request::<Completion>(CompletionParams {
+ text_document_position,
+ partial_result_params: Default::default(),
+ work_done_progress_params: Default::default(),
+ context: None,
+ })
+ .unwrap()
+ {
+ Some(CompletionResponse::Array(items)) => items,
+ Some(CompletionResponse::List(list)) => list.items,
+ None => Vec::new(),
+ };
+
+ for item in &items {
+ if let Some(CompletionTextEdit::Edit(edit)) = item.text_edit.as_ref() {
+ assert_eq!(edit.range, range);
+ }
+ }
+
+ items
+ .into_iter()
+ .take(5)
+ .map(|item| {
+ let mut item = test_bed
+ .client()
+ .send_request::<ResolveCompletionItem>(item)
+ .unwrap();
+
+ item.data = None;
+ item.kind = None;
+ item.sort_text = None;
+ item.documentation = None;
+ item.text_edit = None;
+ item
+ })
+ .sorted_by(|item1, item2| item1.label.cmp(&item2.label))
+ .collect()
+}
+
+#[test]
+fn acronym_ref_simple() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
+\acrshort{f}
+ |
+ ^"#
+ ));
+}
+
+#[test]
+fn acronym_ref_empty() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
+\acrshort{}
+ |"#
+ ));
+}
+
+#[test]
+fn acronym_ref_after_group() {
+ assert_eq!(
+ complete(
+ r#"
+%! main.tex
+\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
+\acrshort{}
+ |"#,
+ ),
+ Vec::new()
+ );
+}
+
+#[test]
+fn acronym_ref_open_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
+\acrshort{f
+ |
+ ^"#
+ ));
+}
+
+#[test]
+fn acronym_package_ref() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\acrodef{fpsLabel}[FPS]{Frames per Second}
+\ac{f
+ |
+ ^"#
+ ));
+}
+
+#[test]
+fn glossary_ref_simple() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
+\gls{f}
+ |
+ ^"#
+ ));
+}
+
+#[test]
+fn glossary_ref_open_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
+\gls{f
+ |
+ ^"#
+ ));
+}
+
+#[test]
+fn argument_empty() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\usepackage{amsfonts}
+\mathbb{}
+ |"#
+ ));
+}
+
+#[test]
+fn argument_word() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\usepackage{amsfonts}
+\mathbb{A}
+ |
+ ^"#
+ ));
+}
+
+#[test]
+fn argument_open_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\usepackage{amsfonts}
+\mathbb{
+ |
+Test"#
+ ));
+}
+
+#[test]
+fn argument_open_brace_unrelated() {
+ assert_eq!(
+ complete(
+ r#"
+%! main.tex
+\usepackage{amsfonts}
+\mathbb{}{
+ |
+Test"#,
+ ),
+ Vec::new()
+ );
+}
+
+#[test]
+fn begin_environment_without_snippet_support() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\beg
+ |
+ ^^^"#
+ ));
+}
+
+#[test]
+fn citation() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\documentclass{article}
+\bibliography{main}
+\begin{document}
+\cite{
+ |
+\end{document}
+
+%! main.bib
+@article{foo:2019,
+ author = {Foo Bar},
+ title = {Baz Qux},
+ year = {2019},
+}
+
+@article{bar:2005,}"#
+ ));
+}
+
+#[test]
+fn citation_open_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\addbibresource{main.bib}
+\cite{
+ |
+
+%! main.bib
+@article{foo,}"#
+ ));
+}
+
+#[test]
+fn citation_open_brace_multiple() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\addbibresource{main.bib}
+\cite{foo,a
+ |
+ ^
+
+%! main.bib
+@article{foo,}"#
+ ));
+}
+
+#[test]
+fn citation_acronym() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\addbibresource{main.bib}
+\DeclareAcronym{foo}{cite={}}
+ |
+
+%! main.bib
+@article{foo,}"#
+ ));
+}
+
+#[test]
+fn citation_after_brace() {
+ assert_eq!(
+ complete(
+ r#"
+%! main.tex
+\documentclass{article}
+\bibliography{main}
+\begin{document}
+\cite{}
+ |
+\end{document}
+
+%! main.bib
+@article{foo,}"#,
+ ),
+ Vec::new()
+ );
+}
+
+#[test]
+fn color_model_definition_simple() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\definecolor{foo}{}
+ |"#
+ ));
+}
+
+#[test]
+fn color_model_definition_open_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\definecolor{foo}{
+ |"#
+ ));
+}
+
+#[test]
+fn color_model_definition_set_simple() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\definecolorset{}
+ |"#
+ ));
+}
+
+#[test]
+fn color_model_definition_set_open_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\definecolorset{
+ |"#
+ ));
+}
+
+#[test]
+fn color_simple() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\color{}
+ |"#
+ ));
+}
+
+#[test]
+fn color_word() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\color{re}
+ |
+ ^^"#
+ ));
+}
+
+#[test]
+fn color_open_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\color{
+ |"#
+ ));
+}
+
+#[test]
+fn component_command_simple() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\
+ |"#
+ ));
+}
+
+#[test]
+fn component_command_simple_before() {
+ assert_eq!(
+ complete(
+ r#"
+%! main.tex
+\
+|"#,
+ ),
+ Vec::new()
+ );
+}
+
+#[test]
+fn component_command_simple_package() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\usepackage{lipsum}
+\lips
+ |
+ ^^^^"#
+ ));
+}
+
+#[test]
+fn component_command_bibtex() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@article{b,
+ c = {\LaT }
+ |
+ ^^^
+}"#
+ ));
+}
+
+#[test]
+fn component_environment_simple() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\begin{doc
+ |
+ ^^^"#
+ ));
+}
+
+#[test]
+fn component_environment_simple_end() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\begin{document}
+\end{
+ |"#
+ ));
+}
+
+#[test]
+fn component_environment_class() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\documentclass{article}
+\begin{thein}
+ |
+ ^^^^^"#
+ ));
+}
+
+#[test]
+fn component_environment_command_definition() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\newcommand{\foo}{\begin{doc}
+ |
+ ^^^"#
+ ));
+}
+
+#[test]
+fn entry_type_at_empty() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@
+ |"#
+ ));
+}
+
+#[test]
+fn entry_type_before_preamble() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@preamble
+ |
+ ^^^^^^^^"#
+ ));
+}
+
+#[test]
+fn entry_type_before_string() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@string
+ |
+ ^^^^^^"#
+ ));
+}
+
+#[test]
+fn entry_type_before_article() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@article
+ |
+ ^^^^^^^"#
+ ));
+}
+
+#[test]
+fn entry_type_after_preamble() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@preamble{
+ |
+ ^^^^^^^^"#
+ ));
+}
+
+#[test]
+fn entry_type_after_string() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@string{
+ |
+ ^^^^^^"#
+ ));
+}
+
+#[test]
+fn entry_type_complete_entry() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@article{foo, author = {foo}}
+ |
+ ^^^^^^^"#
+ ));
+}
+
+#[test]
+fn field_empty_entry_open() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@article{foo,
+ |"#
+ ));
+}
+
+#[test]
+fn field_empty_entry_closed() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@article{foo,}
+ |"#
+ ));
+}
+
+#[test]
+fn field_entry_field_name() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@article{foo, a
+ |
+ ^"#
+ ));
+}
+
+#[test]
+fn field_entry_two_fields_name_open() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@article{foo, author = bar, edit
+ |
+ ^^^^"#
+ ));
+}
+
+#[test]
+fn field_entry_two_fields_name_closed() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.bib
+@article{foo, author = bar, edit}
+ |
+ ^^^^"#
+ ));
+}
+
+#[test]
+fn import_package_open_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\usepackage{lips
+ |
+ ^^^^"#
+ ));
+}
+
+#[test]
+fn import_package_closed_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\usepackage{lips}
+ |
+ ^^^^"#
+ ));
+}
+
+#[test]
+fn import_class_open_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\documentclass{art \foo
+ |
+ ^^^"#
+ ));
+}
+
+#[test]
+fn import_class_closed_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\documentclass{art}
+ |
+ ^^^"#
+ ));
+}
+
+#[test]
+fn label() {
+ assert_json_snapshot!(complete(
+ r#"
+%! foo.tex
+\documentclass{article}
+
+\usepackage{amsmath}
+\usepackage{caption}
+\usepackage{amsthm}
+\newtheorem{lemma}{Lemma}
+
+\begin{document}
+
+\section{Foo}%
+\label{sec:foo}
+
+\begin{equation}%
+\label{eq:foo}
+ 1 + 1 = 2
+\end{equation}
+
+\begin{equation}%
+\label{eq:bar}
+ 1 + 1 = 2
+\end{equation}
+
+\begin{figure}%
+\LaTeX{}
+\caption{Baz}%
+\label{fig:baz}
+\end{figure}
+
+\begin{lemma}%
+\label{thm:foo}
+ 1 + 1 = 2
+\end{lemma}
+
+\include{bar}
+
+\end{document}
+
+%! bar.tex
+\section{Bar}%
+\label{sec:bar}
+
+Lorem ipsum dolor sit amet.
+\ref{}
+ |
+
+%! foo.aux
+\relax
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Baz\relax }}{1}\protected@file@percent }
+\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
+\newlabel{fig:baz}{{1}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
+\newlabel{sec:foo}{{1}{1}}
+\newlabel{eq:foo}{{1}{1}}
+\newlabel{eq:bar}{{2}{1}}
+\newlabel{thm:foo}{{1}{1}}
+\@input{bar.aux}"#
+ ));
+}
+
+#[test]
+fn theorem_begin() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\newtheorem{lemma}{Lemma}
+\begin{lem
+ |
+ ^^^"#
+ ));
+}
+
+#[test]
+fn theorem_end() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\newtheorem{lemma}{Lemma}
+\begin{}
+\end{lem
+ |
+ ^^^"#
+ ));
+}
+
+#[test]
+fn tikz_library_open_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\usepgflibrary{
+ |"#
+ ));
+}
+
+#[test]
+fn tikz_library_closed_brace() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\usepgflibrary{}
+ |"#
+ ));
+}
+
+#[test]
+fn test_user_command() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\foobar
+\fooba
+ |
+ ^^^^^
+\begin{foo}
+\end{foo}
+\begin{fo}"#
+ ));
+}
+
+#[test]
+fn test_user_environment() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\foobar
+\fooba
+\begin{foo}
+\end{foo}
+\begin{fo}
+ |
+ ^^"#
+ ));
+}
+
+#[test]
+fn test_project_resolution_import() {
+ assert_json_snapshot!(complete(
+ r#"
+%! main.tex
+\documentclass{article}
+\import{sub}{sub/sub.tex}
+\lipsu
+ |
+ ^^^^^
+
+%! sub/sub.tex
+\input{child.tex}
+
+%! sub/child.tex
+\usepackage{lipsum}"#
+ ));
+}
+
+#[test]
+fn test_project_resolution_texlabroot() {
+ assert_json_snapshot!(complete(
+ r#"
+%! src/main.tex
+\documentclass{article}
+\include{src/foo}
+\lipsu
+ |
+ ^^^^^
+
+%! src/foo.tex
+\include{src/bar}
+
+%! src/bar.tex
+\usepackage{lipsum}
+
+%! .texlabroot"#
+ ));
+}
diff --git a/support/texlab/tests/lsp/text_document/definition.rs b/support/texlab/tests/lsp/text_document/definition.rs
new file mode 100644
index 0000000000..78eed633c8
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/definition.rs
@@ -0,0 +1,156 @@
+use itertools::Itertools;
+use lsp_types::{
+ request::GotoDefinition, ClientCapabilities, GotoDefinitionParams, GotoDefinitionResponse,
+ LocationLink,
+};
+
+use crate::fixture::TestBed;
+
+fn check(fixture: &str) {
+ let test_bed = TestBed::new(fixture).unwrap();
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let text_document_position_params = test_bed.cursor().unwrap();
+ let cursor = text_document_position_params.position;
+
+ let origin_selection = test_bed
+ .locations()
+ .iter()
+ .filter(|location| location.uri == text_document_position_params.text_document.uri)
+ .find(|location| cursor >= location.range.start && cursor <= location.range.end);
+
+ let mut expected_links: Vec<_> = test_bed
+ .locations()
+ .iter()
+ .filter(|location| Some(*location) != origin_selection)
+ .batching(|it| {
+ let target_selection_range = it.next()?.range;
+ let target = it.next()?;
+ Some(LocationLink {
+ origin_selection_range: origin_selection.map(|sel| sel.range),
+ target_uri: target.uri.clone(),
+ target_range: target.range,
+ target_selection_range,
+ })
+ })
+ .collect();
+
+ let mut actual_links = match test_bed
+ .client()
+ .send_request::<GotoDefinition>(GotoDefinitionParams {
+ text_document_position_params,
+ partial_result_params: Default::default(),
+ work_done_progress_params: Default::default(),
+ })
+ .unwrap()
+ {
+ Some(GotoDefinitionResponse::Link(links)) => links,
+ Some(GotoDefinitionResponse::Array(_)) => unreachable!(),
+ Some(GotoDefinitionResponse::Scalar(_)) => unreachable!(),
+ None => Vec::new(),
+ };
+
+ sort_links(&mut actual_links);
+ sort_links(&mut expected_links);
+ assert_eq!(actual_links, expected_links);
+}
+
+fn sort_links(links: &mut Vec<LocationLink>) {
+ links.sort_by(|a, b| {
+ let left = (&a.target_uri, a.target_range.start);
+ let right = (&b.target_uri, b.target_range.start);
+ left.cmp(&right)
+ });
+}
+
+#[test]
+fn command_definition() {
+ check(
+ r#"
+%! main.tex
+\DeclareMathOperator{\foo}{foo}
+ ^^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+\foo
+ |
+^^^^"#,
+ )
+}
+
+#[test]
+fn document() {
+ check(
+ r#"
+%! foo.tex
+\addbibresource{baz.bib}
+ |
+ ^^^^^^^
+
+%! bar.bib
+@article{foo, bar = {baz}}
+
+%! baz.bib
+@article{foo, bar = {baz}}
+!
+!"#,
+ )
+}
+
+#[test]
+fn entry() {
+ check(
+ r#"
+%! foo.tex
+\addbibresource{baz.bib}
+\cite{foo}
+ |
+ ^^^
+
+%! bar.bib
+@article{foo, bar = {baz}}
+
+%! baz.bib
+@article{foo, bar = {baz}}
+ ^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^^"#,
+ )
+}
+
+#[test]
+fn string_simple() {
+ check(
+ r#"
+%! main.bib
+@string{foo = {bar}}
+ ^^^
+^^^^^^^^^^^^^^^^^^^^
+@article{bar, author = foo}
+ |
+ ^^^"#,
+ )
+}
+
+#[test]
+fn string_join() {
+ check(
+ r#"
+%! main.bib
+@string{foo = {bar}}
+ ^^^
+^^^^^^^^^^^^^^^^^^^^
+@article{bar, author = foo # "bar"}
+ |
+ ^^^"#,
+ )
+}
+
+#[test]
+fn string_field() {
+ check(
+ r#"
+%! main.bib
+@string{foo = {bar}}
+@article{bar, author = foo # "bar"}
+ |"#,
+ )
+}
diff --git a/support/texlab/tests/lsp/text_document/document_highlight.rs b/support/texlab/tests/lsp/text_document/document_highlight.rs
new file mode 100644
index 0000000000..5cfb8fbee8
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/document_highlight.rs
@@ -0,0 +1,51 @@
+use assert_unordered::assert_eq_unordered;
+use lsp_types::{
+ request::DocumentHighlightRequest, ClientCapabilities, DocumentHighlight,
+ DocumentHighlightKind, DocumentHighlightParams,
+};
+
+use crate::fixture::TestBed;
+
+fn check(fixture: &str, highlight_kinds: &[DocumentHighlightKind]) {
+ let test_bed = TestBed::new(fixture).unwrap();
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let expected: Vec<_> = test_bed
+ .locations()
+ .iter()
+ .zip(highlight_kinds)
+ .map(|(location, kind)| DocumentHighlight {
+ range: location.range,
+ kind: Some(*kind),
+ })
+ .collect();
+
+ let text_document_position_params = test_bed.cursor().unwrap();
+ let actual = test_bed
+ .client()
+ .send_request::<DocumentHighlightRequest>(DocumentHighlightParams {
+ text_document_position_params,
+ partial_result_params: Default::default(),
+ work_done_progress_params: Default::default(),
+ })
+ .unwrap()
+ .unwrap_or_default();
+
+ assert_eq_unordered!(actual, expected);
+}
+
+#[test]
+fn test_label() {
+ check(
+ r#"
+%! main.tex
+\label{foo}
+ |
+ ^^^
+\ref{foo}
+ ^^^
+\label{bar}
+"#,
+ &[DocumentHighlightKind::WRITE, DocumentHighlightKind::READ],
+ )
+}
diff --git a/support/texlab/tests/lsp/text_document/document_link.rs b/support/texlab/tests/lsp/text_document/document_link.rs
new file mode 100644
index 0000000000..6aab6105de
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/document_link.rs
@@ -0,0 +1,52 @@
+use insta::assert_json_snapshot;
+use lsp_types::{
+ request::DocumentLinkRequest, ClientCapabilities, DocumentLink, DocumentLinkParams,
+};
+
+use crate::fixture::TestBed;
+
+fn find_links(fixture: &str) -> Vec<DocumentLink> {
+ let test_bed = TestBed::new(fixture).unwrap();
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let text_document_position = test_bed.cursor().unwrap();
+ let mut links = test_bed
+ .client()
+ .send_request::<DocumentLinkRequest>(DocumentLinkParams {
+ text_document: text_document_position.text_document,
+ work_done_progress_params: Default::default(),
+ partial_result_params: Default::default(),
+ })
+ .unwrap()
+ .unwrap_or_default();
+
+ for link in &mut links {
+ link.target = Some(test_bed.redact(link.target.as_ref().unwrap()));
+ }
+
+ links
+}
+
+#[test]
+fn document_include() {
+ assert_json_snapshot!(find_links(
+ r#"
+%! foo.tex
+\input{bar.tex}
+|
+
+%! bar.tex"#,
+ ))
+}
+
+#[test]
+fn document_import() {
+ assert_json_snapshot!(find_links(
+ r#"
+%! foo.tex
+\import{.}{bar/baz}
+|
+
+%! bar/baz.tex"#,
+ ))
+}
diff --git a/support/texlab/tests/lsp/text_document/document_symbol.rs b/support/texlab/tests/lsp/text_document/document_symbol.rs
new file mode 100644
index 0000000000..6ac00176b9
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/document_symbol.rs
@@ -0,0 +1,441 @@
+use insta::assert_json_snapshot;
+use lsp_types::{
+ notification::DidChangeConfiguration, request::DocumentSymbolRequest,
+ DidChangeConfigurationParams, DocumentSymbolParams, DocumentSymbolResponse,
+};
+
+use crate::fixture::TestBed;
+
+fn find_symbols(
+ fixture: &str,
+ capabilities: serde_json::Value,
+ settings: serde_json::Value,
+) -> DocumentSymbolResponse {
+ let test_bed = TestBed::new(fixture).unwrap();
+
+ test_bed
+ .initialize(serde_json::from_value(capabilities).unwrap())
+ .unwrap();
+
+ test_bed
+ .client()
+ .send_notification::<DidChangeConfiguration>(DidChangeConfigurationParams { settings })
+ .unwrap();
+
+ let text_document = test_bed.cursor().unwrap().text_document;
+
+ let mut response = test_bed
+ .client()
+ .send_request::<DocumentSymbolRequest>(DocumentSymbolParams {
+ text_document,
+ work_done_progress_params: Default::default(),
+ partial_result_params: Default::default(),
+ })
+ .unwrap()
+ .unwrap_or_else(|| DocumentSymbolResponse::Flat(vec![]));
+
+ if let DocumentSymbolResponse::Flat(symbols) = &mut response {
+ for symbol in symbols {
+ symbol.location.uri = test_bed.redact(&symbol.location.uri);
+ }
+ }
+
+ response
+}
+
+#[test]
+fn enumerate_nested() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+
+\begin{document}
+
+\begin{enumerate}
+ \item\label{it:foo} Foo
+ \item\label{it:bar} Bar
+ \item[Baz] Baz
+ \item[Qux]\label{it:qux} Qux
+\end{enumerate}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\newlabel{it:foo}{{1}{1}}
+\newlabel{it:qux}{{2}{1}}"#,
+ serde_json::json!({
+ "textDocument": {
+ "documentSymbol": {
+ "hierarchicalDocumentSymbolSupport": true,
+ },
+ },
+ }),
+ serde_json::Value::Null,
+ ));
+}
+
+#[test]
+fn enumerate_flat() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+
+\begin{document}
+
+\begin{enumerate}
+ \item\label{it:foo} Foo
+ \item\label{it:bar} Bar
+ \item[Baz] Baz
+ \item[Qux]\label{it:qux} Qux
+\end{enumerate}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\newlabel{it:foo}{{1}{1}}
+\newlabel{it:qux}{{2}{1}}"#,
+ serde_json::json!({}),
+ serde_json::Value::Null,
+ ));
+}
+
+#[test]
+fn equation_nested() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+
+\begin{document}
+
+\begin{equation}\label{eq:foo}
+ Foo
+\end{equation}
+
+\begin{equation}\label{eq:bar}
+ Bar
+\end{equation}
+
+\begin{equation}
+ Baz
+\end{equation}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\newlabel{eq:foo}{{1}{1}}"#,
+ serde_json::json!({
+ "textDocument": {
+ "documentSymbol": {
+ "hierarchicalDocumentSymbolSupport": true,
+ },
+ },
+ }),
+ serde_json::Value::Null,
+ ));
+}
+
+#[test]
+fn equation_flat() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+
+\begin{document}
+
+\begin{equation}\label{eq:foo}
+ Foo
+\end{equation}
+
+\begin{equation}\label{eq:bar}
+ Bar
+\end{equation}
+
+\begin{equation}
+ Baz
+\end{equation}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\newlabel{eq:foo}{{1}{1}}"#,
+ serde_json::json!({}),
+ serde_json::Value::Null,
+ ));
+}
+
+#[test]
+fn float_nested() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+
+\begin{document}
+
+\begin{figure}
+ Foo
+ \caption{Foo}\label{fig:foo}
+\end{figure}
+
+\begin{figure}
+ Bar
+ \caption{Bar}\label{fig:bar}
+\end{figure}
+
+\begin{figure}
+ Baz
+ \caption{Baz}
+\end{figure}
+
+\begin{figure}
+ Qux
+\end{figure}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Foo}}{1}\protected@file@percent }
+\newlabel{fig:foo}{{1}{1}}
+\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Bar}}{1}\protected@file@percent }
+\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Baz}}{1}\protected@file@percent }"#,
+ serde_json::json!({
+ "textDocument": {
+ "documentSymbol": {
+ "hierarchicalDocumentSymbolSupport": true,
+ },
+ },
+ }),
+ serde_json::Value::Null,
+ ));
+}
+
+#[test]
+fn float_flat() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+
+\begin{document}
+
+\begin{figure}
+ Foo
+ \caption{Foo}\label{fig:foo}
+\end{figure}
+
+\begin{figure}
+ Bar
+ \caption{Bar}\label{fig:bar}
+\end{figure}
+
+\begin{figure}
+ Baz
+ \caption{Baz}
+\end{figure}
+
+\begin{figure}
+ Qux
+\end{figure}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Foo}}{1}\protected@file@percent }
+\newlabel{fig:foo}{{1}{1}}
+\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Bar}}{1}\protected@file@percent }
+\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Baz}}{1}\protected@file@percent }"#,
+ serde_json::json!({}),
+ serde_json::Value::Null,
+ ));
+}
+
+#[test]
+fn section_nested() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+
+\begin{document}
+
+\section{Foo}
+
+\section{Bar}\label{sec:bar}
+
+\subsection{Baz}\label{sec:baz}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
+\newlabel{sec:bar}{{2}{1}}"#,
+ serde_json::json!({
+ "textDocument": {
+ "documentSymbol": {
+ "hierarchicalDocumentSymbolSupport": true,
+ },
+ },
+ }),
+ serde_json::Value::Null,
+ ));
+}
+
+#[test]
+fn section_flat() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+
+\begin{document}
+
+\section{Foo}
+
+\section{Bar}\label{sec:bar}
+
+\subsection{Baz}\label{sec:baz}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
+\newlabel{sec:bar}{{2}{1}}"#,
+ serde_json::json!({}),
+ serde_json::Value::Null,
+ ));
+}
+
+#[test]
+fn theorem_nested() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+\usepackage{amsthm}
+\newtheorem{lemma}{Lemma}
+
+\begin{document}
+
+\begin{lemma}[Foo]\label{thm:foo}
+ Foo
+\end{lemma}
+
+\begin{lemma}\label{thm:bar}
+ Bar
+\end{lemma}
+
+\begin{lemma}\label{thm:baz}
+ Baz
+\end{lemma}
+
+\begin{lemma}[Qux]
+ Qux
+\end{lemma}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\newlabel{thm:foo}{{1}{1}}
+\newlabel{thm:bar}{{2}{1}}"#,
+ serde_json::json!({
+ "textDocument": {
+ "documentSymbol": {
+ "hierarchicalDocumentSymbolSupport": true,
+ },
+ },
+ }),
+ serde_json::Value::Null,
+ ));
+}
+
+#[test]
+fn theorem_flat() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+\usepackage{amsthm}
+\newtheorem{lemma}{Lemma}
+
+\begin{document}
+
+\begin{lemma}[Foo]\label{thm:foo}
+ Foo
+\end{lemma}
+
+\begin{lemma}\label{thm:bar}
+ Bar
+\end{lemma}
+
+\begin{lemma}\label{thm:baz}
+ Baz
+\end{lemma}
+
+\begin{lemma}[Qux]
+ Qux
+\end{lemma}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\newlabel{thm:foo}{{1}{1}}
+\newlabel{thm:bar}{{2}{1}}"#,
+ serde_json::json!({}),
+ serde_json::Value::Null,
+ ));
+}
+
+#[test]
+fn ignored_patterns() {
+ assert_json_snapshot!(find_symbols(
+ r#"
+%! main.tex
+\documentclass{article}
+
+\begin{document}
+
+\begin{equation}\label{eq:foo}
+ Foo
+\end{equation}
+
+\begin{enumerate}
+ \item Foo
+ \item Bar
+\end{enumerate}
+
+\end{document}
+|"#,
+ serde_json::json!({}),
+ serde_json::json!({
+ "symbols": {
+ "ignoredPatterns": ["Item", "Enumerate"]
+ }
+ }),
+ ));
+}
diff --git a/support/texlab/tests/lsp/text_document/folding_range.rs b/support/texlab/tests/lsp/text_document/folding_range.rs
new file mode 100644
index 0000000000..063ca7533d
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/folding_range.rs
@@ -0,0 +1,66 @@
+use insta::assert_json_snapshot;
+use lsp_types::{
+ request::FoldingRangeRequest, ClientCapabilities, FoldingRange, FoldingRangeParams,
+};
+
+use crate::fixture::TestBed;
+
+fn find_foldings(fixture: &str) -> Vec<FoldingRange> {
+ let test_bed = TestBed::new(fixture).unwrap();
+
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let text_document = test_bed.cursor().unwrap().text_document;
+ test_bed
+ .client()
+ .send_request::<FoldingRangeRequest>(FoldingRangeParams {
+ text_document,
+ work_done_progress_params: Default::default(),
+ partial_result_params: Default::default(),
+ })
+ .unwrap()
+ .unwrap_or_default()
+}
+
+#[test]
+fn latex() {
+ assert_json_snapshot!(find_foldings(
+ r#"
+%! main.tex
+\begin{document}
+ \section{Foo}
+ foo
+ \subsection{Bar}
+ bar
+ \section{Baz}
+ baz
+ \section{Qux}
+\end{document}
+|"#
+ ));
+}
+
+#[test]
+fn bibtex() {
+ assert_json_snapshot!(find_foldings(
+ r#"
+%! main.bib
+some junk
+here
+
+@article{foo,
+ author = {bar},
+ title = {baz}
+}
+
+@string{foo = "bar"}
+
+@comment{foo,
+ author = {bar},
+ title = {baz}
+}
+
+@preamble{"foo"}
+|"#
+ ));
+}
diff --git a/support/texlab/tests/lsp/text_document/formatting.rs b/support/texlab/tests/lsp/text_document/formatting.rs
new file mode 100644
index 0000000000..295022c76a
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/formatting.rs
@@ -0,0 +1,134 @@
+use insta::assert_snapshot;
+use lsp_types::{
+ request::Formatting, ClientCapabilities, DocumentFormattingParams, FormattingOptions,
+};
+use texlab::util::{line_index::LineIndex, line_index_ext::LineIndexExt};
+
+use crate::fixture::TestBed;
+
+fn format(fixture: &str) -> String {
+ let test_bed = TestBed::new(fixture).unwrap();
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let text_document = test_bed.cursor().unwrap().text_document;
+ let edits = test_bed
+ .client()
+ .send_request::<Formatting>(DocumentFormattingParams {
+ text_document,
+ work_done_progress_params: Default::default(),
+ options: FormattingOptions {
+ insert_spaces: true,
+ tab_size: 4,
+ ..Default::default()
+ },
+ })
+ .unwrap()
+ .unwrap_or_default();
+
+ let old_text = &test_bed.documents()[0].text;
+ let line_index = LineIndex::new(old_text);
+ let mut new_text = String::from(old_text);
+ for edit in edits.into_iter().rev() {
+ let range = line_index.offset_lsp_range(edit.range);
+ new_text.replace_range::<std::ops::Range<usize>>(range.into(), &edit.new_text);
+ }
+
+ new_text
+}
+
+#[test]
+fn bibtex_internal_wrap_long_lines() {
+ assert_snapshot!(format(
+ r#"
+%! main.bib
+@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+Lorem ipsum dolor sit amet,
+consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}
+|"#,
+ ));
+}
+
+#[test]
+fn bibtex_internal_multiple_entries() {
+ assert_snapshot!(format(
+ r#"
+%! main.bib
+@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet,
+consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}
+
+@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet,
+consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}"
+|"#,
+ ));
+}
+
+#[test]
+fn bibtex_internal_trailing_comma() {
+ assert_snapshot!(format(
+ r#"
+%! main.bib
+@article{foo, bar = baz}
+|"#,
+ ));
+}
+
+#[test]
+fn bibtex_internal_insert_braces() {
+ assert_snapshot!(format(
+ r#"
+%! main.bib
+@article{foo, bar = baz,
+|"#,
+ ));
+}
+
+#[test]
+fn bibtex_internal_command() {
+ assert_snapshot!(format(
+ r#"
+%! main.bib
+@article{foo, bar = "\baz",}
+|"#,
+ ));
+}
+
+#[test]
+fn bibtex_internal_join_strings() {
+ assert_snapshot!(format(
+ r#"
+%! main.bib
+@article{foo, bar = "baz" # "qux"}
+|"#,
+ ));
+}
+
+#[test]
+fn bibtex_internal_parens() {
+ assert_snapshot!(format(
+ r#"
+%! main.bib
+@article(foo,)
+|"#,
+ ));
+}
+
+#[test]
+fn bibtex_internal_string() {
+ assert_snapshot!(format(
+ r#"
+%! main.bib
+@string{foo="bar"}
+|"#,
+ ));
+}
+
+#[test]
+fn bibtex_internal_preamble() {
+ assert_snapshot!(format(
+ r#"
+%! main.bib
+@preamble{
+ "foo bar baz" }
+|"#,
+ ));
+}
diff --git a/support/texlab/tests/lsp/text_document/hover.rs b/support/texlab/tests/lsp/text_document/hover.rs
new file mode 100644
index 0000000000..5dafceb781
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/hover.rs
@@ -0,0 +1,246 @@
+use insta::assert_json_snapshot;
+use lsp_types::{request::HoverRequest, ClientCapabilities, HoverContents, HoverParams};
+
+use crate::fixture::TestBed;
+
+fn find_hover(fixture: &str) -> Option<HoverContents> {
+ let test_bed = TestBed::new(fixture).unwrap();
+
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let text_document_position_params = test_bed.cursor().unwrap();
+
+ test_bed
+ .client()
+ .send_request::<HoverRequest>(HoverParams {
+ text_document_position_params,
+ work_done_progress_params: Default::default(),
+ })
+ .unwrap()
+ .map(|hover| {
+ assert_eq!(hover.range, Some(test_bed.locations()[0].range));
+ hover.contents
+ })
+}
+
+#[test]
+fn empty_latex_document() {
+ assert_eq!(
+ find_hover(
+ r#"
+%! main.tex
+
+|"#
+ ),
+ None,
+ );
+}
+
+#[test]
+fn empty_bibtex_document() {
+ assert_eq!(
+ find_hover(
+ r#"
+%! main.bib
+
+|"#
+ ),
+ None,
+ );
+}
+
+#[test]
+fn citation_inside_cite() {
+ assert_json_snapshot!(find_hover(
+ r#"
+%! main.bib
+@article{foo, author = {Foo Bar}, title = {Baz Qux}, year = 1337}
+
+%! main.tex
+\addbibresource{main.bib}
+\cite{foo}
+ |
+ ^^^"#
+ ));
+}
+
+#[test]
+fn citation_inside_entry() {
+ assert_json_snapshot!(find_hover(
+ r#"
+%! main.bib
+@article{foo, author = {Foo Bar}, title = {Baz Qux}, year = 1337}
+ |
+ ^^^
+
+%! main.tex
+\addbibresource{main.bib}
+\cite{foo}"#
+ ));
+}
+
+#[test]
+fn component_known_package() {
+ assert_json_snapshot!(find_hover(
+ r#"
+%! main.tex
+\usepackage{amsmath}
+ |
+ ^^^^^^^"#
+ ));
+}
+
+#[test]
+fn component_unknown_class() {
+ assert_eq!(
+ find_hover(
+ r#"
+%! main.tex
+\documentclass{abcdefghijklmnop}
+ |"#
+ ),
+ None,
+ );
+}
+
+#[test]
+fn entry_type_known_type() {
+ assert_json_snapshot!(find_hover(
+ r#"
+%! main.bib
+@article{foo,}
+ |
+^^^^^^^^"#
+ ));
+}
+
+#[test]
+fn entry_type_unknown_field() {
+ assert_eq!(
+ find_hover(
+ r#"
+%! main.bib
+@foo{bar,}
+ |"#
+ ),
+ None,
+ );
+}
+
+#[test]
+fn entry_type_key() {
+ assert_eq!(
+ find_hover(
+ r#"
+%! main.bib
+@foo{bar,}
+ |"#
+ ),
+ None,
+ );
+}
+
+#[test]
+fn field_known() {
+ assert_json_snapshot!(find_hover(
+ r#"
+%! main.bib
+@article{foo, author = bar}
+ |
+ ^^^^^^"#
+ ));
+}
+
+#[test]
+fn field_unknown() {
+ assert_eq!(
+ find_hover(
+ r#"
+%! main.bib
+@article{foo, bar = baz}
+ |"#
+ ),
+ None,
+ );
+}
+
+#[test]
+fn section() {
+ assert_json_snapshot!(find_hover(
+ r#"
+%! main.tex
+\section{Foo}
+\label{sec:foo}
+ |
+ ^^^^^^^"#,
+ ));
+}
+
+#[test]
+fn string_inside_reference() {
+ assert_json_snapshot!(find_hover(
+ r#"
+%! main.bib
+@string{foo = "Foo"}
+@string{bar = "Bar"}
+@article{baz, author = bar}
+ |
+ ^^^"#
+ ));
+}
+
+#[test]
+fn string_inside_field() {
+ assert_eq!(
+ find_hover(
+ r#"
+%! main.bib
+@string{foo = "Foo"}
+@string{bar = "Bar"}
+@article{baz, author = bar}
+ |"#
+ ),
+ None,
+ );
+}
+
+#[test]
+fn label_theorem_child_file() {
+ assert_json_snapshot!(find_hover(
+ r#"
+%! main.tex
+\documentclass{article}
+\newtheorem{lemma}{Lemma}
+\include{child}
+\ref{thm:foo}
+ |
+ ^^^^^^^
+
+%! child.tex
+\begin{lemma}\label{thm:foo}
+ 1 + 1 = 2
+\end{lemma}"#
+ ));
+}
+
+#[test]
+fn label_theorem_child_file_mumber() {
+ assert_json_snapshot!(find_hover(
+ r#"
+%! main.tex
+\documentclass{article}
+\newtheorem{lemma}{Lemma}
+\include{child}
+\ref{thm:foo}
+ |
+ ^^^^^^^
+
+%! child.tex
+\begin{lemma}[Foo]\label{thm:foo}
+ 1 + 1 = 2
+\end{lemma}
+
+%! child.aux
+\newlabel{thm:foo}{{1}{1}{Foo}{lemma.1}{}}"#
+ ));
+}
diff --git a/support/texlab/tests/lsp/text_document/inlay_hint.rs b/support/texlab/tests/lsp/text_document/inlay_hint.rs
new file mode 100644
index 0000000000..d8ae8e304a
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/inlay_hint.rs
@@ -0,0 +1,57 @@
+use insta::assert_json_snapshot;
+use lsp_types::{
+ request::InlayHintRequest, ClientCapabilities, InlayHint, InlayHintParams, Position, Range,
+};
+
+use crate::fixture::TestBed;
+
+fn find_hints(fixture: &str) -> Vec<InlayHint> {
+ let test_bed = TestBed::new(fixture).unwrap();
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let cursor = test_bed.cursor().unwrap();
+
+ test_bed
+ .client()
+ .send_request::<InlayHintRequest>(InlayHintParams {
+ text_document: cursor.text_document,
+ range: Range::new(Position::new(0, 0), cursor.position),
+ work_done_progress_params: Default::default(),
+ })
+ .unwrap()
+ .unwrap_or_default()
+}
+
+#[test]
+fn label_definition() {
+ assert_json_snapshot!(find_hints(
+ r#"
+%! main.tex
+\documentclass{article}
+\usepackage{caption}
+\begin{document}
+\section{Foo}\label{sec:foo}
+\section{Bar}\label{sec:bar}
+\subsection{Baz}\label{sec:baz}
+\begin{figure}
+ Test
+ \label{fig:qux}
+ \caption{Qux}
+\end{figure}
+\end{document}
+ |
+
+%! main.aux
+\relax
+\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
+\newlabel{fig:qux}{{\caption@xref {fig:qux}{ on input line 15}}{1}}
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Qux\relax }}{1}{}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}{}\protected@file@percent }
+\newlabel{sec:foo}{{1}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}{}\protected@file@percent }
+\newlabel{sec:bar}{{2}{1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Baz}{1}{}\protected@file@percent }
+\newlabel{sec:baz}{{2.1}{1}}
+\gdef \@abspage@last{1}"#,
+ ));
+}
diff --git a/support/texlab/tests/lsp/text_document/references.rs b/support/texlab/tests/lsp/text_document/references.rs
new file mode 100644
index 0000000000..9933babbd4
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/references.rs
@@ -0,0 +1,270 @@
+use lsp_types::{
+ request::References, ClientCapabilities, Location, ReferenceContext, ReferenceParams,
+};
+
+use crate::fixture::TestBed;
+
+fn sort(locations: &mut Vec<Location>) {
+ locations.sort_by(|a, b| (&a.uri, a.range.start).cmp(&(&b.uri, b.range.start)));
+}
+
+fn check(fixture: &str, context: ReferenceContext) {
+ let test_bed = TestBed::new(fixture).unwrap();
+
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let text_document_position = test_bed.cursor().unwrap();
+
+ let mut expected = test_bed.locations().to_vec();
+
+ let mut actual = test_bed
+ .client()
+ .send_request::<References>(ReferenceParams {
+ text_document_position,
+ context,
+ partial_result_params: Default::default(),
+ work_done_progress_params: Default::default(),
+ })
+ .unwrap()
+ .unwrap_or_default();
+
+ sort(&mut actual);
+ sort(&mut expected);
+ assert_eq!(actual, expected);
+}
+
+#[test]
+fn entry_definition() {
+ check(
+ r#"
+%! foo.bib
+@article{foo,}
+ |
+
+%! bar.tex
+\cite{foo}
+ ^^^
+\addbibresource{foo.bib}
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn entry_definition_include_decl() {
+ check(
+ r#"
+%! foo.bib
+@article{foo,}
+ |
+ ^^^
+
+%! bar.tex
+\cite{foo}
+ ^^^
+\addbibresource{foo.bib}
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
+
+#[test]
+fn entry_reference() {
+ check(
+ r#"
+%! foo.bib
+@article{foo,}
+
+%! bar.tex
+\cite{foo}
+ |
+ ^^^
+\addbibresource{foo.bib}
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn entry_reference_include_decl() {
+ check(
+ r#"
+%! foo.bib
+@article{foo,}
+ ^^^
+
+%! bar.tex
+\cite{foo}
+ |
+ ^^^
+\addbibresource{foo.bib}
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
+
+#[test]
+fn label_definition() {
+ check(
+ r#"
+%! foo.tex
+\label{foo}
+ |
+
+%! bar.tex
+\ref{foo}
+ ^^^
+\input{foo.tex}
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn label_definition_include_decl() {
+ check(
+ r#"
+%! foo.tex
+\label{foo}
+ |
+ ^^^
+
+%! bar.tex
+\ref{foo}
+ ^^^
+\input{foo.tex}
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
+
+#[test]
+fn label_reference() {
+ check(
+ r#"
+%! foo.tex
+\label{foo}
+\input{bar.tex}
+
+%! bar.tex
+\ref{foo}
+ |
+ ^^^
+
+%! baz.tex
+\ref{foo}
+ ^^^
+\input{bar.tex}
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn label_reference_include_decl() {
+ check(
+ r#"
+%! foo.tex
+\label{foo}
+ ^^^
+\input{bar.tex}
+
+%! bar.tex
+\ref{foo}
+ |
+ ^^^
+
+%! baz.tex
+\ref{foo}
+ ^^^
+\input{bar.tex}
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
+
+#[test]
+fn string_reference() {
+ check(
+ r#"
+%! main.bib
+@string{foo = {Foo}}
+@string{bar = {Bar}}
+@article{baz, author = foo}
+ |
+ ^^^
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn string_reference_include_decl() {
+ check(
+ r#"
+%! main.bib
+@string{foo = {Foo}}
+ ^^^
+@string{bar = {Bar}}
+@article{baz, author = foo}
+ |
+ ^^^
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
+
+#[test]
+fn string_definition() {
+ check(
+ r#"
+%! main.bib
+@string{foo = {Foo}}
+ |
+@string{bar = {Bar}}
+@article{baz, author = foo}
+ ^^^
+"#,
+ ReferenceContext {
+ include_declaration: false,
+ },
+ )
+}
+
+#[test]
+fn string_definition_include_decl() {
+ check(
+ r#"
+%! main.bib
+@string{foo = {Foo}}
+ |
+ ^^^
+@string{bar = {Bar}}
+@article{baz, author = foo}
+ ^^^
+"#,
+ ReferenceContext {
+ include_declaration: true,
+ },
+ )
+}
diff --git a/support/texlab/tests/lsp/text_document/rename.rs b/support/texlab/tests/lsp/text_document/rename.rs
new file mode 100644
index 0000000000..183443809a
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/rename.rs
@@ -0,0 +1,106 @@
+use std::collections::HashMap;
+
+use lsp_types::{request::Rename, ClientCapabilities, RenameParams, TextEdit, Url, WorkspaceEdit};
+
+use crate::fixture::TestBed;
+
+fn check(fixture: &str, new_name: &str) {
+ let test_bed = TestBed::new(fixture).unwrap();
+
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let mut expected_changes: HashMap<Url, Vec<TextEdit>> = HashMap::new();
+ for location in test_bed.locations() {
+ expected_changes
+ .entry(location.uri.clone())
+ .or_default()
+ .push(TextEdit::new(location.range, new_name.to_string()));
+ }
+
+ let text_document_position = test_bed.cursor().unwrap();
+ let actual_edit = test_bed
+ .client()
+ .send_request::<Rename>(RenameParams {
+ text_document_position,
+ new_name: new_name.to_string(),
+ work_done_progress_params: Default::default(),
+ })
+ .unwrap()
+ .unwrap_or_default();
+
+ assert_eq!(actual_edit, WorkspaceEdit::new(expected_changes));
+}
+
+#[test]
+fn command() {
+ check(
+ r#"
+%! foo.tex
+\baz
+ |
+ ^^^
+\include{bar.tex}
+
+%! bar.tex
+\baz
+ ^^^
+"#,
+ "qux",
+ )
+}
+
+#[test]
+fn entry() {
+ check(
+ r#"
+%! main.bib
+@article{foo, bar = baz}
+ |
+ ^^^
+
+%! main.tex
+\addbibresource{main.bib}
+\cite{foo}
+ ^^^
+"#,
+ "qux",
+ )
+}
+
+#[test]
+fn citation() {
+ check(
+ r#"
+%! main.bib
+@article{foo, bar = baz}
+ ^^^
+
+%! main.tex
+\addbibresource{main.bib}
+\cite{foo}
+ |
+ ^^^
+"#,
+ "qux",
+ )
+}
+
+#[test]
+fn label() {
+ check(
+ r#"
+%! foo.tex
+\label{foo}\include{bar}
+ |
+ ^^^
+
+%! bar.tex
+\ref{foo}
+ ^^^
+
+%! baz.tex
+\ref{foo}
+"#,
+ "bar",
+ )
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap
new file mode 100644
index 0000000000..19c84e95fc
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\acrodef{fpsLabel}[FPS]{Frames per Second}\n\\ac{f\n |\n ^\"#)"
+---
+[
+ {
+ "label": "fpsLabel",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap
new file mode 100644
index 0000000000..23e5b695ef
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n\\acrshort{}\n |\"#)"
+---
+[
+ {
+ "label": "fpsLabel",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap
new file mode 100644
index 0000000000..25171b679c
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n\\acrshort{f\n |\n ^\"#)"
+---
+[
+ {
+ "label": "fpsLabel",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap
new file mode 100644
index 0000000000..1d3f3329c1
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n\\acrshort{f}\n |\n ^\"#)"
+---
+[
+ {
+ "label": "fpsLabel",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap
new file mode 100644
index 0000000000..ecc48b5a7f
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\usepackage{amsfonts}\n\\mathbb{}\n |\"#)"
+---
+[
+ {
+ "label": "A",
+ "preselect": false
+ },
+ {
+ "label": "B",
+ "preselect": false
+ },
+ {
+ "label": "C",
+ "preselect": false
+ },
+ {
+ "label": "D",
+ "preselect": false
+ },
+ {
+ "label": "E",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap
new file mode 100644
index 0000000000..530527a384
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\usepackage{amsfonts}\n\\mathbb{\n |\nTest\"#)"
+---
+[
+ {
+ "label": "A",
+ "preselect": false
+ },
+ {
+ "label": "B",
+ "preselect": false
+ },
+ {
+ "label": "C",
+ "preselect": false
+ },
+ {
+ "label": "D",
+ "preselect": false
+ },
+ {
+ "label": "E",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap
new file mode 100644
index 0000000000..c98249c781
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\usepackage{amsfonts}\n\\mathbb{A}\n |\n ^\"#)"
+---
+[
+ {
+ "label": "A",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap
new file mode 100644
index 0000000000..bb9e30ae55
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap
@@ -0,0 +1,31 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\beg\n |\n ^^^\"#)"
+---
+[
+ {
+ "label": "AtBeginDocument",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "AtBeginDvi",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "begin",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "begingroup",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "bigwedge",
+ "detail": "â‹€, built-in",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap
new file mode 100644
index 0000000000..b8755fdef0
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap
@@ -0,0 +1,16 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\documentclass{article}\n\\bibliography{main}\n\\begin{document}\n\\cite{\n |\n\\end{document}\n\n%! main.bib\n@article{foo:2019,\n author = {Foo Bar},\n title = {Baz Qux},\n year = {2019},\n}\n\n@article{bar:2005,}\"#)"
+---
+[
+ {
+ "label": "bar:2005",
+ "preselect": false,
+ "filterText": "bar:2005 @article bar:2005"
+ },
+ {
+ "label": "foo:2019",
+ "preselect": false,
+ "filterText": "foo:2019 @article foo:2019 author Foo Bar title Baz Qux year 2019"
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap
new file mode 100644
index 0000000000..36478c45c8
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap
@@ -0,0 +1,11 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\addbibresource{main.bib}\n\\DeclareAcronym{foo}{cite={}}\n |\n\n%! main.bib\n@article{foo,}\"#)"
+---
+[
+ {
+ "label": "foo",
+ "preselect": false,
+ "filterText": "foo @article foo"
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap
new file mode 100644
index 0000000000..41a1d9ced3
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap
@@ -0,0 +1,11 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\addbibresource{main.bib}\n\\cite{\n |\n\n%! main.bib\n@article{foo,}\"#)"
+---
+[
+ {
+ "label": "foo",
+ "preselect": false,
+ "filterText": "foo @article foo"
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap
new file mode 100644
index 0000000000..8ef509b463
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap
@@ -0,0 +1,11 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\addbibresource{main.bib}\n\\cite{foo,a\n |\n ^\n\n%! main.bib\n@article{foo,}\"#)"
+---
+[
+ {
+ "label": "foo",
+ "preselect": false,
+ "filterText": "foo @article foo"
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap
new file mode 100644
index 0000000000..421335a4a5
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\definecolor{foo}{\n |\"#)"
+---
+[
+ {
+ "label": "HTML",
+ "preselect": false
+ },
+ {
+ "label": "RGB",
+ "preselect": false
+ },
+ {
+ "label": "cmyk",
+ "preselect": false
+ },
+ {
+ "label": "gray",
+ "preselect": false
+ },
+ {
+ "label": "rgb",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap
new file mode 100644
index 0000000000..5d7338e48e
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\definecolorset{\n |\"#)"
+---
+[
+ {
+ "label": "HTML",
+ "preselect": false
+ },
+ {
+ "label": "RGB",
+ "preselect": false
+ },
+ {
+ "label": "cmyk",
+ "preselect": false
+ },
+ {
+ "label": "gray",
+ "preselect": false
+ },
+ {
+ "label": "rgb",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap
new file mode 100644
index 0000000000..811b47c9ee
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\definecolorset{}\n |\"#)"
+---
+[
+ {
+ "label": "HTML",
+ "preselect": false
+ },
+ {
+ "label": "RGB",
+ "preselect": false
+ },
+ {
+ "label": "cmyk",
+ "preselect": false
+ },
+ {
+ "label": "gray",
+ "preselect": false
+ },
+ {
+ "label": "rgb",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap
new file mode 100644
index 0000000000..dbb34f08d9
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\definecolor{foo}{}\n |\"#)"
+---
+[
+ {
+ "label": "HTML",
+ "preselect": false
+ },
+ {
+ "label": "RGB",
+ "preselect": false
+ },
+ {
+ "label": "cmyk",
+ "preselect": false
+ },
+ {
+ "label": "gray",
+ "preselect": false
+ },
+ {
+ "label": "rgb",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap
new file mode 100644
index 0000000000..e30fc4c1b0
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\color{\n |\"#)"
+---
+[
+ {
+ "label": "Apricot",
+ "preselect": false
+ },
+ {
+ "label": "Aquamarine",
+ "preselect": false
+ },
+ {
+ "label": "Bittersweet",
+ "preselect": false
+ },
+ {
+ "label": "Black",
+ "preselect": false
+ },
+ {
+ "label": "Blue",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap
new file mode 100644
index 0000000000..5aab0d8e3b
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\color{}\n |\"#)"
+---
+[
+ {
+ "label": "Apricot",
+ "preselect": false
+ },
+ {
+ "label": "Aquamarine",
+ "preselect": false
+ },
+ {
+ "label": "Bittersweet",
+ "preselect": false
+ },
+ {
+ "label": "Black",
+ "preselect": false
+ },
+ {
+ "label": "Blue",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap
new file mode 100644
index 0000000000..fe803dc6cc
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\color{re}\n |\n ^^\"#)"
+---
+[
+ {
+ "label": "BrickRed",
+ "preselect": false
+ },
+ {
+ "label": "Red",
+ "preselect": false
+ },
+ {
+ "label": "RedOrange",
+ "preselect": false
+ },
+ {
+ "label": "RedViolet",
+ "preselect": false
+ },
+ {
+ "label": "red",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap
new file mode 100644
index 0000000000..616fb22a6b
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap
@@ -0,0 +1,31 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@article{b,\n c = {\\LaT }\n |\n ^^^\n}\"#)"
+---
+[
+ {
+ "label": "LaTeX",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "LaTeXe",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "LastDeclaredEncoding",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "last",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "latexreleaseversion",
+ "detail": "built-in",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap
new file mode 100644
index 0000000000..0e40056a6e
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap
@@ -0,0 +1,31 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\\n |\"#)"
+---
+[
+ {
+ "label": "!",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "\"",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "#",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "$",
+ "detail": "$, built-in",
+ "preselect": false
+ },
+ {
+ "label": "%",
+ "detail": "built-in",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap
new file mode 100644
index 0000000000..360229fa7a
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap
@@ -0,0 +1,31 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\usepackage{lipsum}\n\\lips\n |\n ^^^^\"#)"
+---
+[
+ {
+ "label": "LipsumPar",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "LipsumProtect",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "LipsumRestoreAll",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "lipsum",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "lipsumexp",
+ "detail": "lipsum.sty",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap
new file mode 100644
index 0000000000..a2e5e17ac4
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap
@@ -0,0 +1,11 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\documentclass{article}\n\\begin{thein}\n |\n ^^^^^\"#)"
+---
+[
+ {
+ "label": "theindex",
+ "detail": "article.cls",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap
new file mode 100644
index 0000000000..28d9c6e82c
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap
@@ -0,0 +1,11 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\newcommand{\\foo}{\\begin{doc}\n |\n ^^^\"#)"
+---
+[
+ {
+ "label": "document",
+ "detail": "built-in",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap
new file mode 100644
index 0000000000..f892dba5a7
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap
@@ -0,0 +1,11 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\begin{doc\n |\n ^^^\"#)"
+---
+[
+ {
+ "label": "document",
+ "detail": "built-in",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap
new file mode 100644
index 0000000000..95a2e1db04
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap
@@ -0,0 +1,31 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\begin{document}\n\\end{\n |\"#)"
+---
+[
+ {
+ "label": "abstract",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "array",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "center",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "csname",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "document",
+ "detail": "built-in",
+ "preselect": true
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap
new file mode 100644
index 0000000000..0fd8b00254
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@preamble{\n |\n ^^^^^^^^\"#)"
+---
+[
+ {
+ "label": "preamble",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap
new file mode 100644
index 0000000000..6844fc1862
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@string{\n |\n ^^^^^^\"#)"
+---
+[
+ {
+ "label": "string",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap
new file mode 100644
index 0000000000..e74f5fed37
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@\n |\"#)"
+---
+[
+ {
+ "label": "article",
+ "preselect": false
+ },
+ {
+ "label": "artwork",
+ "preselect": false
+ },
+ {
+ "label": "audio",
+ "preselect": false
+ },
+ {
+ "label": "bibnote",
+ "preselect": false
+ },
+ {
+ "label": "book",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap
new file mode 100644
index 0000000000..f9defdee01
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@article\n |\n ^^^^^^^\"#)"
+---
+[
+ {
+ "label": "article",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap
new file mode 100644
index 0000000000..aad03a392b
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@preamble\n |\n ^^^^^^^^\"#)"
+---
+[
+ {
+ "label": "preamble",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap
new file mode 100644
index 0000000000..e30c60a45c
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@string\n |\n ^^^^^^\"#)"
+---
+[
+ {
+ "label": "string",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap
new file mode 100644
index 0000000000..2724026a26
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@article{foo, author = {foo}}\n |\n ^^^^^^^\"#)"
+---
+[
+ {
+ "label": "article",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap
new file mode 100644
index 0000000000..a5a1d7838e
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@article{foo,}\n |\"#)"
+---
+[
+ {
+ "label": "abstract",
+ "preselect": false
+ },
+ {
+ "label": "addendum",
+ "preselect": false
+ },
+ {
+ "label": "address",
+ "preselect": false
+ },
+ {
+ "label": "afterword",
+ "preselect": false
+ },
+ {
+ "label": "annotation",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap
new file mode 100644
index 0000000000..693d4ed141
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@article{foo,\n |\"#)"
+---
+[
+ {
+ "label": "abstract",
+ "preselect": false
+ },
+ {
+ "label": "addendum",
+ "preselect": false
+ },
+ {
+ "label": "address",
+ "preselect": false
+ },
+ {
+ "label": "afterword",
+ "preselect": false
+ },
+ {
+ "label": "annotation",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap
new file mode 100644
index 0000000000..cb0d41ed5d
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@article{foo, a\n |\n ^\"#)"
+---
+[
+ {
+ "label": "abstract",
+ "preselect": false
+ },
+ {
+ "label": "addendum",
+ "preselect": false
+ },
+ {
+ "label": "address",
+ "preselect": false
+ },
+ {
+ "label": "afterword",
+ "preselect": false
+ },
+ {
+ "label": "annotation",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap
new file mode 100644
index 0000000000..66dbf62785
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@article{foo, author = bar, edit}\n |\n ^^^^\"#)"
+---
+[
+ {
+ "label": "edition",
+ "preselect": false
+ },
+ {
+ "label": "editor",
+ "preselect": false
+ },
+ {
+ "label": "editora",
+ "preselect": false
+ },
+ {
+ "label": "editoratype",
+ "preselect": false
+ },
+ {
+ "label": "editorb",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap
new file mode 100644
index 0000000000..221f78f335
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.bib\n@article{foo, author = bar, edit\n |\n ^^^^\"#)"
+---
+[
+ {
+ "label": "edition",
+ "preselect": false
+ },
+ {
+ "label": "editor",
+ "preselect": false
+ },
+ {
+ "label": "editora",
+ "preselect": false
+ },
+ {
+ "label": "editoratype",
+ "preselect": false
+ },
+ {
+ "label": "editorb",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap
new file mode 100644
index 0000000000..1be95d5d99
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n\\gls{f\n |\n ^\"#)"
+---
+[
+ {
+ "label": "fpsLabel",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap
new file mode 100644
index 0000000000..81e9299d69
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap
@@ -0,0 +1,10 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n\\gls{f}\n |\n ^\"#)"
+---
+[
+ {
+ "label": "fpsLabel",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap
new file mode 100644
index 0000000000..9ed7978612
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\documentclass{art}\n |\n ^^^\"#)"
+---
+[
+ {
+ "label": "article",
+ "preselect": false
+ },
+ {
+ "label": "articleingud",
+ "preselect": false
+ },
+ {
+ "label": "articoletteracdp",
+ "preselect": false
+ },
+ {
+ "label": "artikel1",
+ "preselect": false
+ },
+ {
+ "label": "artikel2",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap
new file mode 100644
index 0000000000..b650b621c6
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\documentclass{art \\foo\n |\n ^^^\"#)"
+---
+[
+ {
+ "label": "article",
+ "preselect": false
+ },
+ {
+ "label": "articleingud",
+ "preselect": false
+ },
+ {
+ "label": "articoletteracdp",
+ "preselect": false
+ },
+ {
+ "label": "artikel1",
+ "preselect": false
+ },
+ {
+ "label": "artikel2",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap
new file mode 100644
index 0000000000..f8cad5526c
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\usepackage{lips}\n |\n ^^^^\"#)"
+---
+[
+ {
+ "label": "lips",
+ "preselect": false
+ },
+ {
+ "label": "lipsum",
+ "preselect": false
+ },
+ {
+ "label": "lisp-simple-alloc",
+ "preselect": false
+ },
+ {
+ "label": "lisp-string",
+ "preselect": false
+ },
+ {
+ "label": "lwarp-lips",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap
new file mode 100644
index 0000000000..d234241e24
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\usepackage{lips\n |\n ^^^^\"#)"
+---
+[
+ {
+ "label": "lips",
+ "preselect": false
+ },
+ {
+ "label": "lipsum",
+ "preselect": false
+ },
+ {
+ "label": "lisp-simple-alloc",
+ "preselect": false
+ },
+ {
+ "label": "lisp-string",
+ "preselect": false
+ },
+ {
+ "label": "lwarp-lips",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap
new file mode 100644
index 0000000000..a186c56920
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap
@@ -0,0 +1,36 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! foo.tex\n\\documentclass{article}\n\n\\usepackage{amsmath}\n\\usepackage{caption}\n\\usepackage{amsthm}\n\\newtheorem{lemma}{Lemma}\n\n\\begin{document}\n\n\\section{Foo}%\n\\label{sec:foo}\n\n\\begin{equation}%\n\\label{eq:foo}\n 1 + 1 = 2\n\\end{equation}\n\n\\begin{equation}%\n\\label{eq:bar}\n 1 + 1 = 2\n\\end{equation}\n\n\\begin{figure}%\n\\LaTeX{}\n\\caption{Baz}%\n\\label{fig:baz}\n\\end{figure}\n\n\\begin{lemma}%\n\\label{thm:foo}\n 1 + 1 = 2\n\\end{lemma}\n\n\\include{bar}\n\n\\end{document}\n\n%! bar.tex\n\\section{Bar}%\n\\label{sec:bar}\n\nLorem ipsum dolor sit amet.\n\\ref{}\n |\n\n%! foo.aux\n\\relax\n\\@writefile{lof}{\\contentsline {figure}{\\numberline {1}{\\ignorespaces Baz\\relax }}{1}\\protected@file@percent }\n\\providecommand*\\caption@xref[2]{\\@setref\\relax\\@undefined{#1}}\n\\newlabel{fig:baz}{{1}{1}}\n\\@writefile{toc}{\\contentsline {section}{\\numberline {1}Foo}{1}\\protected@file@percent }\n\\newlabel{sec:foo}{{1}{1}}\n\\newlabel{eq:foo}{{1}{1}}\n\\newlabel{eq:bar}{{2}{1}}\n\\newlabel{thm:foo}{{1}{1}}\n\\@input{bar.aux}\"#)"
+---
+[
+ {
+ "label": "eq:bar",
+ "detail": "Equation (2)",
+ "preselect": false,
+ "filterText": "eq:bar Equation (2)"
+ },
+ {
+ "label": "eq:foo",
+ "detail": "Equation (1)",
+ "preselect": false,
+ "filterText": "eq:foo Equation (1)"
+ },
+ {
+ "label": "fig:baz",
+ "detail": "Figure 1",
+ "preselect": false,
+ "filterText": "fig:baz Figure 1: Baz"
+ },
+ {
+ "label": "sec:bar",
+ "detail": "Section (Bar)",
+ "preselect": false,
+ "filterText": "sec:bar Section (Bar)"
+ },
+ {
+ "label": "sec:foo",
+ "detail": "Section 1 (Foo)",
+ "preselect": false,
+ "filterText": "sec:foo Section 1 (Foo)"
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap
new file mode 100644
index 0000000000..351dc96deb
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap
@@ -0,0 +1,31 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\documentclass{article}\n\\import{sub}{sub/sub.tex}\n\\lipsu\n |\n ^^^^^\n\n%! sub/sub.tex\n\\input{child.tex}\n\n%! sub/child.tex\n\\usepackage{lipsum}\"#)"
+---
+[
+ {
+ "label": "LipsumPar",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "LipsumProtect",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "LipsumRestoreAll",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "lipsum",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "lipsumexp",
+ "detail": "lipsum.sty",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap
new file mode 100644
index 0000000000..8ddefbc6ad
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap
@@ -0,0 +1,31 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! src/main.tex\n\\documentclass{article}\n\\include{src/foo}\n\\lipsu\n |\n ^^^^^\n\n%! src/foo.tex\n\\include{src/bar}\n\n%! src/bar.tex\n\\usepackage{lipsum}\n\n%! .texlabroot\"#)"
+---
+[
+ {
+ "label": "LipsumPar",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "LipsumProtect",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "LipsumRestoreAll",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "lipsum",
+ "detail": "lipsum.sty",
+ "preselect": false
+ },
+ {
+ "label": "lipsumexp",
+ "detail": "lipsum.sty",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap
new file mode 100644
index 0000000000..f60725667f
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap
@@ -0,0 +1,11 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\newtheorem{lemma}{Lemma}\n\\begin{lem\n |\n ^^^\"#)"
+---
+[
+ {
+ "label": "lemma",
+ "detail": "user-defined",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap
new file mode 100644
index 0000000000..0ec951db1d
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap
@@ -0,0 +1,11 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\newtheorem{lemma}{Lemma}\n\\begin{}\n\\end{lem\n |\n ^^^\"#)"
+---
+[
+ {
+ "label": "lemma",
+ "detail": "user-defined",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap
new file mode 100644
index 0000000000..e727fbbc1d
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\usepgflibrary{}\n |\"#)"
+---
+[
+ {
+ "label": "arrows",
+ "preselect": false
+ },
+ {
+ "label": "arrows.meta",
+ "preselect": false
+ },
+ {
+ "label": "arrows.spaced",
+ "preselect": false
+ },
+ {
+ "label": "curvilinear",
+ "preselect": false
+ },
+ {
+ "label": "datavisualization.barcharts",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap
new file mode 100644
index 0000000000..668b445c91
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap
@@ -0,0 +1,26 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\usepgflibrary{\n |\"#)"
+---
+[
+ {
+ "label": "arrows",
+ "preselect": false
+ },
+ {
+ "label": "arrows.meta",
+ "preselect": false
+ },
+ {
+ "label": "arrows.spaced",
+ "preselect": false
+ },
+ {
+ "label": "curvilinear",
+ "preselect": false
+ },
+ {
+ "label": "datavisualization.barcharts",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap
new file mode 100644
index 0000000000..83e2e701ea
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap
@@ -0,0 +1,11 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\foobar\n\\fooba\n |\n ^^^^^\n\\begin{foo}\n\\end{foo}\n\\begin{fo}\"#)"
+---
+[
+ {
+ "label": "foobar",
+ "detail": "user-defined",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap
new file mode 100644
index 0000000000..c46a9beb26
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap
@@ -0,0 +1,16 @@
+---
+source: tests/lsp/text_document/completion.rs
+expression: "complete(r#\"\n%! main.tex\n\\foobar\n\\fooba\n\\begin{foo}\n\\end{foo}\n\\begin{fo}\n |\n ^^\"#)"
+---
+[
+ {
+ "label": "filecontents",
+ "detail": "built-in",
+ "preselect": false
+ },
+ {
+ "label": "foo",
+ "detail": "user-defined",
+ "preselect": false
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap
new file mode 100644
index 0000000000..b27d0f7a32
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap
@@ -0,0 +1,19 @@
+---
+source: tests/lsp/text_document/document_link.rs
+expression: "find_links(r#\"\n%! foo.tex\n\\import{.}{bar/baz}\n|\n\n%! bar/baz.tex\"#)"
+---
+[
+ {
+ "range": {
+ "start": {
+ "line": 0,
+ "character": 11
+ },
+ "end": {
+ "line": 0,
+ "character": 18
+ }
+ },
+ "target": "file:///bar/baz.tex"
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap
new file mode 100644
index 0000000000..fd88cb4a8c
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap
@@ -0,0 +1,19 @@
+---
+source: tests/lsp/text_document/document_link.rs
+expression: "find_links(r#\"\n%! foo.tex\n\\input{bar.tex}\n|\n\n%! bar.tex\"#)"
+---
+[
+ {
+ "range": {
+ "start": {
+ "line": 0,
+ "character": 7
+ },
+ "end": {
+ "line": 0,
+ "character": 14
+ }
+ },
+ "target": "file:///bar.tex"
+ }
+]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__enumerate_flat.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_flat.snap
index 4c5a17fb98..cd18c3f06e 100644
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__enumerate_flat.snap
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_flat.snap
@@ -1,6 +1,6 @@
---
-source: src/tests/text_document/document_symbol.rs
-expression: result.response
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\n\\begin{document}\n\n\\begin{enumerate}\n \\item\\label{it:foo} Foo\n \\item\\label{it:bar} Bar\n \\item[Baz] Baz\n \\item[Qux]\\label{it:qux} Qux\n\\end{enumerate}\n\n\\end{document}\n|\n\n%! main.aux\n\\relax\n\\newlabel{it:foo}{{1}{1}}\n\\newlabel{it:qux}{{2}{1}}\"#,\n serde_json::json!({}), serde_json::Value::Null)"
---
[
{
@@ -8,7 +8,7 @@ expression: result.response
"kind": 10,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 4,
@@ -22,11 +22,11 @@ expression: result.response
}
},
{
- "name": "Item",
+ "name": "1",
"kind": 22,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 5,
@@ -44,7 +44,7 @@ expression: result.response
"kind": 22,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 6,
@@ -62,7 +62,7 @@ expression: result.response
"kind": 22,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 7,
@@ -76,11 +76,11 @@ expression: result.response
}
},
{
- "name": "Qux",
+ "name": "2",
"kind": 22,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 8,
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__enumerate_nested.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_nested.snap
index 630311f32e..8f777b6d8f 100644
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__enumerate_nested.snap
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_nested.snap
@@ -1,6 +1,6 @@
---
-source: src/tests/text_document/document_symbol.rs
-expression: result.response
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\n\\begin{document}\n\n\\begin{enumerate}\n \\item\\label{it:foo} Foo\n \\item\\label{it:bar} Bar\n \\item[Baz] Baz\n \\item[Qux]\\label{it:qux} Qux\n\\end{enumerate}\n\n\\end{document}\n|\n\n%! main.aux\n\\relax\n\\newlabel{it:foo}{{1}{1}}\n\\newlabel{it:qux}{{2}{1}}\"#,\n serde_json::json!({\n \"textDocument\" :\n {\n \"documentSymbol\" :\n { \"hierarchicalDocumentSymbolSupport\" : true, },\n },\n }), serde_json::Value::Null)"
---
[
{
@@ -29,7 +29,7 @@ expression: result.response
},
"children": [
{
- "name": "Item",
+ "name": "1",
"detail": "it:foo",
"kind": 22,
"deprecated": false,
@@ -109,7 +109,7 @@ expression: result.response
"children": []
},
{
- "name": "Qux",
+ "name": "2",
"detail": "it:qux",
"kind": 22,
"deprecated": false,
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__equation_flat.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_flat.snap
index 24ab44c772..d37fe4cbbf 100644
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__equation_flat.snap
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_flat.snap
@@ -1,14 +1,14 @@
---
-source: src/tests/text_document/document_symbol.rs
-expression: result.response
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\n\\begin{document}\n\n\\begin{equation}\\label{eq:foo}\n Foo\n\\end{equation}\n\n\\begin{equation}\\label{eq:bar}\n Bar\n\\end{equation}\n\n\\begin{equation}\n Baz\n\\end{equation}\n\n\\end{document}\n|\n\n%! main.aux\n\\relax\n\\newlabel{eq:foo}{{1}{1}}\"#,\n serde_json::json!({}), serde_json::Value::Null)"
---
[
{
- "name": "Equation",
+ "name": "Equation (1)",
"kind": 14,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 4,
@@ -26,7 +26,7 @@ expression: result.response
"kind": 14,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 8,
@@ -44,7 +44,7 @@ expression: result.response
"kind": 14,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 12,
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__equation_nested.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_nested.snap
index 2efe7a4796..5965400814 100644
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__equation_nested.snap
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_nested.snap
@@ -1,10 +1,10 @@
---
-source: src/tests/text_document/document_symbol.rs
-expression: result.response
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\n\\begin{document}\n\n\\begin{equation}\\label{eq:foo}\n Foo\n\\end{equation}\n\n\\begin{equation}\\label{eq:bar}\n Bar\n\\end{equation}\n\n\\begin{equation}\n Baz\n\\end{equation}\n\n\\end{document}\n|\n\n%! main.aux\n\\relax\n\\newlabel{eq:foo}{{1}{1}}\"#,\n serde_json::json!({\n \"textDocument\" :\n {\n \"documentSymbol\" :\n { \"hierarchicalDocumentSymbolSupport\" : true, },\n },\n }), serde_json::Value::Null)"
---
[
{
- "name": "Equation",
+ "name": "Equation (1)",
"detail": "eq:foo",
"kind": 14,
"deprecated": false,
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_flat.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_flat.snap
new file mode 100644
index 0000000000..e93be78925
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_flat.snap
@@ -0,0 +1,60 @@
+---
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\n\\begin{document}\n\n\\begin{figure}\n Foo\n \\caption{Foo}\\label{fig:foo}\n\\end{figure}\n\n\\begin{figure}\n Bar\n \\caption{Bar}\\label{fig:bar}\n\\end{figure}\n\n\\begin{figure}\n Baz\n \\caption{Baz}\n\\end{figure}\n\n\\begin{figure}\n Qux\n\\end{figure}\n\n\\end{document}\n|\n\n%! main.aux\n\\relax\n\\@writefile{lof}{\\contentsline {figure}{\\numberline {1}{\\ignorespaces Foo}}{1}\\protected@file@percent }\n\\newlabel{fig:foo}{{1}{1}}\n\\@writefile{lof}{\\contentsline {figure}{\\numberline {2}{\\ignorespaces Bar}}{1}\\protected@file@percent }\n\\@writefile{lof}{\\contentsline {figure}{\\numberline {3}{\\ignorespaces Baz}}{1}\\protected@file@percent }\"#,\n serde_json::json!({}), serde_json::Value::Null)"
+---
+[
+ {
+ "name": "Figure 1: Foo",
+ "kind": 6,
+ "deprecated": false,
+ "location": {
+ "uri": "file:///main.tex",
+ "range": {
+ "start": {
+ "line": 4,
+ "character": 0
+ },
+ "end": {
+ "line": 7,
+ "character": 12
+ }
+ }
+ }
+ },
+ {
+ "name": "Figure: Bar",
+ "kind": 6,
+ "deprecated": false,
+ "location": {
+ "uri": "file:///main.tex",
+ "range": {
+ "start": {
+ "line": 9,
+ "character": 0
+ },
+ "end": {
+ "line": 12,
+ "character": 12
+ }
+ }
+ }
+ },
+ {
+ "name": "Figure: Baz",
+ "kind": 6,
+ "deprecated": false,
+ "location": {
+ "uri": "file:///main.tex",
+ "range": {
+ "start": {
+ "line": 14,
+ "character": 0
+ },
+ "end": {
+ "line": 17,
+ "character": 12
+ }
+ }
+ }
+ }
+]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__float_nested.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_nested.snap
index 18c5f3ca93..a625beb1fb 100644
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__float_nested.snap
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_nested.snap
@@ -1,10 +1,10 @@
---
-source: src/tests/text_document/document_symbol.rs
-expression: result.response
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\n\\begin{document}\n\n\\begin{figure}\n Foo\n \\caption{Foo}\\label{fig:foo}\n\\end{figure}\n\n\\begin{figure}\n Bar\n \\caption{Bar}\\label{fig:bar}\n\\end{figure}\n\n\\begin{figure}\n Baz\n \\caption{Baz}\n\\end{figure}\n\n\\begin{figure}\n Qux\n\\end{figure}\n\n\\end{document}\n|\n\n%! main.aux\n\\relax\n\\@writefile{lof}{\\contentsline {figure}{\\numberline {1}{\\ignorespaces Foo}}{1}\\protected@file@percent }\n\\newlabel{fig:foo}{{1}{1}}\n\\@writefile{lof}{\\contentsline {figure}{\\numberline {2}{\\ignorespaces Bar}}{1}\\protected@file@percent }\n\\@writefile{lof}{\\contentsline {figure}{\\numberline {3}{\\ignorespaces Baz}}{1}\\protected@file@percent }\"#,\n serde_json::json!({\n \"textDocument\" :\n {\n \"documentSymbol\" :\n { \"hierarchicalDocumentSymbolSupport\" : true, },\n },\n }), serde_json::Value::Null)"
---
[
{
- "name": "Figure: Foo",
+ "name": "Figure 1: Foo",
"detail": "fig:foo",
"kind": 6,
"deprecated": false,
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__ignored_patterns.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__ignored_patterns.snap
new file mode 100644
index 0000000000..90c445fc01
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__ignored_patterns.snap
@@ -0,0 +1,24 @@
+---
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\n\\begin{document}\n\n\\begin{equation}\\label{eq:foo}\n Foo\n\\end{equation}\n \n\\begin{enumerate}\n \\item Foo\n \\item Bar\n\\end{enumerate}\n\n\\end{document}\n|\"#,\n serde_json::json!({}),\n serde_json::json!({\n \"symbols\" : { \"ignoredPatterns\" : [\"Item\", \"Enumerate\"] }\n }))"
+---
+[
+ {
+ "name": "Equation",
+ "kind": 14,
+ "deprecated": false,
+ "location": {
+ "uri": "file:///main.tex",
+ "range": {
+ "start": {
+ "line": 4,
+ "character": 0
+ },
+ "end": {
+ "line": 6,
+ "character": 14
+ }
+ }
+ }
+ }
+]
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__section_flat.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_flat.snap
index 87ff442db1..85d9cef9e8 100644
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__section_flat.snap
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_flat.snap
@@ -1,6 +1,6 @@
---
-source: src/tests/text_document/document_symbol.rs
-expression: result.response
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\n\\begin{document}\n\n\\section{Foo}\n\n\\section{Bar}\\label{sec:bar}\n\n\\subsection{Baz}\\label{sec:baz}\n\n\\end{document}\n|\n\n%! main.aux\n\\relax\n\\@writefile{toc}{\\contentsline {section}{\\numberline {1}Foo}{1}\\protected@file@percent }\n\\@writefile{toc}{\\contentsline {section}{\\numberline {2}Bar}{1}\\protected@file@percent }\n\\newlabel{sec:bar}{{2}{1}}\"#,\n serde_json::json!({}), serde_json::Value::Null)"
---
[
{
@@ -8,7 +8,7 @@ expression: result.response
"kind": 2,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 4,
@@ -22,11 +22,11 @@ expression: result.response
}
},
{
- "name": "Bar",
+ "name": "2 Bar",
"kind": 2,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 6,
@@ -44,7 +44,7 @@ expression: result.response
"kind": 2,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 8,
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__section_nested.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_nested.snap
index bf4fea547e..bac292bf01 100644
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__section_nested.snap
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_nested.snap
@@ -1,6 +1,6 @@
---
-source: src/tests/text_document/document_symbol.rs
-expression: result.response
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\n\\begin{document}\n\n\\section{Foo}\n\n\\section{Bar}\\label{sec:bar}\n\n\\subsection{Baz}\\label{sec:baz}\n\n\\end{document}\n|\n\n%! main.aux\n\\relax\n\\@writefile{toc}{\\contentsline {section}{\\numberline {1}Foo}{1}\\protected@file@percent }\n\\@writefile{toc}{\\contentsline {section}{\\numberline {2}Bar}{1}\\protected@file@percent }\n\\newlabel{sec:bar}{{2}{1}}\"#,\n serde_json::json!({\n \"textDocument\" :\n {\n \"documentSymbol\" :\n { \"hierarchicalDocumentSymbolSupport\" : true, },\n },\n }), serde_json::Value::Null)"
---
[
{
@@ -30,7 +30,7 @@ expression: result.response
"children": []
},
{
- "name": "Bar",
+ "name": "2 Bar",
"detail": "sec:bar",
"kind": 2,
"deprecated": false,
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__theorem_flat.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_flat.snap
index d033c3ca62..55ab44980c 100644
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__theorem_flat.snap
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_flat.snap
@@ -1,14 +1,14 @@
---
-source: src/tests/text_document/document_symbol.rs
-expression: result.response
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\\usepackage{amsthm}\n\\newtheorem{lemma}{Lemma}\n\n\\begin{document}\n\n\\begin{lemma}[Foo]\\label{thm:foo}\n Foo\n\\end{lemma}\n\n\\begin{lemma}\\label{thm:bar}\n Bar\n\\end{lemma}\n\n\\begin{lemma}\\label{thm:baz}\n Baz\n\\end{lemma}\n\n\\begin{lemma}[Qux]\n Qux\n\\end{lemma}\n\n\\end{document}\n|\n\n%! main.aux\n\\relax\n\\newlabel{thm:foo}{{1}{1}}\n\\newlabel{thm:bar}{{2}{1}}\"#,\n serde_json::json!({}), serde_json::Value::Null)"
---
[
{
- "name": "Lemma (Foo)",
+ "name": "Lemma 1 (Foo)",
"kind": 13,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 6,
@@ -22,11 +22,11 @@ expression: result.response
}
},
{
- "name": "Lemma",
+ "name": "Lemma 2",
"kind": 13,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 10,
@@ -44,7 +44,7 @@ expression: result.response
"kind": 13,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 14,
@@ -62,7 +62,7 @@ expression: result.response
"kind": 13,
"deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 18,
diff --git a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__theorem_nested.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_nested.snap
index 22844dd700..82bdd6d1d9 100644
--- a/support/texlab/src/tests/text_document/snapshots/texlab__tests__text_document__document_symbol__theorem_nested.snap
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_nested.snap
@@ -1,10 +1,10 @@
---
-source: src/tests/text_document/document_symbol.rs
-expression: result.response
+source: tests/lsp/text_document/document_symbol.rs
+expression: "find_symbols(r#\"\n%! main.tex\n\\documentclass{article}\n\\usepackage{amsthm}\n\\newtheorem{lemma}{Lemma}\n\n\\begin{document}\n\n\\begin{lemma}[Foo]\\label{thm:foo}\n Foo\n\\end{lemma}\n\n\\begin{lemma}\\label{thm:bar}\n Bar\n\\end{lemma}\n\n\\begin{lemma}\\label{thm:baz}\n Baz\n\\end{lemma}\n\n\\begin{lemma}[Qux]\n Qux\n\\end{lemma}\n\n\\end{document}\n|\n\n%! main.aux\n\\relax\n\\newlabel{thm:foo}{{1}{1}}\n\\newlabel{thm:bar}{{2}{1}}\"#,\n serde_json::json!({\n \"textDocument\" :\n {\n \"documentSymbol\" :\n { \"hierarchicalDocumentSymbolSupport\" : true, },\n },\n }), serde_json::Value::Null)"
---
[
{
- "name": "Lemma (Foo)",
+ "name": "Lemma 1 (Foo)",
"detail": "thm:foo",
"kind": 13,
"deprecated": false,
@@ -31,7 +31,7 @@ expression: result.response
"children": []
},
{
- "name": "Lemma",
+ "name": "Lemma 2",
"detail": "thm:bar",
"kind": 13,
"deprecated": false,
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__bibtex.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__bibtex.snap
new file mode 100644
index 0000000000..2063cc39e5
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__bibtex.snap
@@ -0,0 +1,27 @@
+---
+source: tests/lsp/text_document/folding_range.rs
+expression: "find_foldings(r#\"\n%! main.bib\nsome junk\nhere\n\n@article{foo,\n author = {bar},\n title = {baz}\n}\n\n@string{foo = \"bar\"}\n\n@comment{foo,\n author = {bar},\n title = {baz}\n}\n\n@preamble{\"foo\"}\n|\"#)"
+---
+[
+ {
+ "startLine": 3,
+ "startCharacter": 0,
+ "endLine": 6,
+ "endCharacter": 1,
+ "kind": "region"
+ },
+ {
+ "startLine": 8,
+ "startCharacter": 0,
+ "endLine": 8,
+ "endCharacter": 20,
+ "kind": "region"
+ },
+ {
+ "startLine": 15,
+ "startCharacter": 0,
+ "endLine": 15,
+ "endCharacter": 16,
+ "kind": "region"
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__latex.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__latex.snap
new file mode 100644
index 0000000000..74632eda56
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__latex.snap
@@ -0,0 +1,41 @@
+---
+source: tests/lsp/text_document/folding_range.rs
+expression: "find_foldings(r#\"\n%! main.tex\n\\begin{document}\n \\section{Foo}\n foo\n \\subsection{Bar}\n bar\n \\section{Baz}\n baz\n \\section{Qux}\n\\end{document}\n|\"#)"
+---
+[
+ {
+ "startLine": 0,
+ "startCharacter": 0,
+ "endLine": 8,
+ "endCharacter": 14,
+ "kind": "region"
+ },
+ {
+ "startLine": 1,
+ "startCharacter": 4,
+ "endLine": 4,
+ "endCharacter": 7,
+ "kind": "region"
+ },
+ {
+ "startLine": 3,
+ "startCharacter": 4,
+ "endLine": 4,
+ "endCharacter": 7,
+ "kind": "region"
+ },
+ {
+ "startLine": 5,
+ "startCharacter": 4,
+ "endLine": 6,
+ "endCharacter": 7,
+ "kind": "region"
+ },
+ {
+ "startLine": 7,
+ "startCharacter": 4,
+ "endLine": 7,
+ "endCharacter": 17,
+ "kind": "region"
+ }
+]
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap
new file mode 100644
index 0000000000..b98dd68758
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap
@@ -0,0 +1,7 @@
+---
+source: tests/lsp/text_document/formatting.rs
+expression: "format(r#\"\n%! main.bib\n@article{foo, bar = \"\\baz\",}\n|\"#)"
+---
+@article{foo,
+ bar = "\baz",
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap
new file mode 100644
index 0000000000..a95f5d3006
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap
@@ -0,0 +1,7 @@
+---
+source: tests/lsp/text_document/formatting.rs
+expression: "format(r#\"\n%! main.bib\n@article{foo, bar = baz,\n|\"#)"
+---
+@article{foo,
+ bar = baz,
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap
new file mode 100644
index 0000000000..3ea6bf18ad
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap
@@ -0,0 +1,7 @@
+---
+source: tests/lsp/text_document/formatting.rs
+expression: "format(r#\"\n%! main.bib\n@article{foo, bar = \"baz\" # \"qux\"}\n|\"#)"
+---
+@article{foo,
+ bar = "baz" # "qux",
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap
new file mode 100644
index 0000000000..966f133a76
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap
@@ -0,0 +1,15 @@
+---
+source: tests/lsp/text_document/formatting.rs
+expression: "format(r#\"\n%! main.bib\n@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, \nconsectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}\n\n@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, \nconsectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}\"\n|\"#)"
+---
+@article{foo,
+ bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
+ dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
+ amet, consectetur adipiscing elit.},
+}
+
+@article{foo,
+ bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
+ dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
+ amet, consectetur adipiscing elit.},
+}"
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap
new file mode 100644
index 0000000000..ca317db108
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap
@@ -0,0 +1,6 @@
+---
+source: tests/lsp/text_document/formatting.rs
+expression: "format(r#\"\n%! main.bib\n@article(foo,)\n|\"#)"
+---
+@article{foo,
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap
new file mode 100644
index 0000000000..6448e3a791
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap
@@ -0,0 +1,5 @@
+---
+source: tests/lsp/text_document/formatting.rs
+expression: "format(r#\"\n%! main.bib\n@preamble{\n \"foo bar baz\" }\n|\"#)"
+---
+@preamble{"foo bar baz"}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap
new file mode 100644
index 0000000000..a1739290fd
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap
@@ -0,0 +1,5 @@
+---
+source: tests/lsp/text_document/formatting.rs
+expression: "format(r#\"\n%! main.bib\n@string{foo=\"bar\"}\n|\"#)"
+---
+@string{foo = "bar"}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap
new file mode 100644
index 0000000000..dd5c7b49f0
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap
@@ -0,0 +1,7 @@
+---
+source: tests/lsp/text_document/formatting.rs
+expression: "format(r#\"\n%! main.bib\n@article{foo, bar = baz}\n|\"#)"
+---
+@article{foo,
+ bar = baz,
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap
new file mode 100644
index 0000000000..c52b8a9317
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap
@@ -0,0 +1,9 @@
+---
+source: tests/lsp/text_document/formatting.rs
+expression: "format(r#\"\n%! main.bib\n@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.\nLorem ipsum dolor sit amet,\nconsectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}\n|\"#)"
+---
+@article{foo,
+ bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
+ dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
+ amet, consectetur adipiscing elit.},
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_cite.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_cite.snap
new file mode 100644
index 0000000000..6e6c6b264c
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_cite.snap
@@ -0,0 +1,8 @@
+---
+source: tests/lsp/text_document/hover.rs
+expression: "find_hover(r#\"\n%! main.bib\n@article{foo, author = {Foo Bar}, title = {Baz Qux}, year = 1337}\n\n%! main.tex\n\\addbibresource{main.bib}\n\\cite{foo}\n |\n ^^^\"#)"
+---
+{
+ "kind": "markdown",
+ "value": "F. Bar: \"Baz Qux\". (1337)."
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_entry.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_entry.snap
new file mode 100644
index 0000000000..c13c16051d
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_entry.snap
@@ -0,0 +1,8 @@
+---
+source: tests/lsp/text_document/hover.rs
+expression: "find_hover(r#\"\n%! main.bib\n@article{foo, author = {Foo Bar}, title = {Baz Qux}, year = 1337}\n |\n ^^^\n\n%! main.tex\n\\addbibresource{main.bib}\n\\cite{foo}\"#)"
+---
+{
+ "kind": "markdown",
+ "value": "F. Bar: \"Baz Qux\". (1337)."
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__component_known_package.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__component_known_package.snap
new file mode 100644
index 0000000000..ea1801d4ed
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__component_known_package.snap
@@ -0,0 +1,8 @@
+---
+source: tests/lsp/text_document/hover.rs
+expression: "find_hover(r#\"\n%! main.tex\n\\usepackage{amsmath}\n |\n ^^^^^^^\"#)"
+---
+{
+ "kind": "plaintext",
+ "value": "The package provides the principal packages in the AMS-LaTeX distribution. It adapts for use in LaTeX most of the mathematical features found in AMS-TeX; it is highly recommended as an adjunct to serious mathematical typesetting in LaTeX. When amsmath is loaded, AMS-LaTeX packages amsbsy (for bold symbols), amsopn (for operator names) and amstext (for text embedded in mathematics) are also loaded. amsmath is part of the LaTeX required distribution; however, several contributed packages add still further to its appeal; examples are empheq, which provides functions for decorating and highlighting mathematics, and ntheorem, for specifying theorem (and similar) definitions."
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__entry_type_known_type.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__entry_type_known_type.snap
new file mode 100644
index 0000000000..f3b146fb21
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__entry_type_known_type.snap
@@ -0,0 +1,8 @@
+---
+source: tests/lsp/text_document/hover.rs
+expression: "find_hover(r#\"\n%! main.bib\n@article{foo,}\n |\n^^^^^^^^\"#)"
+---
+{
+ "kind": "markdown",
+ "value": "An article in a journal, magazine, newspaper, or other periodical which forms a \n self-contained unit with its own title. The title of the periodical is given in the \n journaltitle field. If the issue has its own title in addition to the main title of \n the periodical, it goes in the issuetitle field. Note that editor and related \n fields refer to the journal while translator and related fields refer to the article.\n\nRequired fields: `author`, `title`, `journaltitle`, `year/date`"
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__field_known.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__field_known.snap
new file mode 100644
index 0000000000..42d630c287
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__field_known.snap
@@ -0,0 +1,8 @@
+---
+source: tests/lsp/text_document/hover.rs
+expression: "find_hover(r#\"\n%! main.bib\n@article{foo, author = bar}\n |\n ^^^^^^\"#)"
+---
+{
+ "kind": "markdown",
+ "value": "The author(s) of the `title`."
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file.snap
new file mode 100644
index 0000000000..19b36c4ebb
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file.snap
@@ -0,0 +1,8 @@
+---
+source: tests/lsp/text_document/hover.rs
+expression: "find_hover(r#\"\n%! main.tex\n\\documentclass{article}\n\\newtheorem{lemma}{Lemma}\n\\include{child}\n\\ref{thm:foo}\n |\n ^^^^^^^\n\n%! child.tex\n\\begin{lemma}\\label{thm:foo}\n 1 + 1 = 2\n\\end{lemma}\"#)"
+---
+{
+ "kind": "plaintext",
+ "value": "Lemma"
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file_mumber.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file_mumber.snap
new file mode 100644
index 0000000000..78ccef8e46
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file_mumber.snap
@@ -0,0 +1,8 @@
+---
+source: tests/lsp/text_document/hover.rs
+expression: "find_hover(r#\"\n%! main.tex\n\\documentclass{article}\n\\newtheorem{lemma}{Lemma}\n\\include{child}\n\\ref{thm:foo}\n |\n ^^^^^^^\n\n%! child.tex\n\\begin{lemma}[Foo]\\label{thm:foo}\n 1 + 1 = 2\n\\end{lemma}\n\n%! child.aux\n\\newlabel{thm:foo}{{1}{1}{Foo}{lemma.1}{}}\"#)"
+---
+{
+ "kind": "plaintext",
+ "value": "Lemma 1 (Foo)"
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__section.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__section.snap
new file mode 100644
index 0000000000..c8aa265330
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__section.snap
@@ -0,0 +1,8 @@
+---
+source: tests/lsp/text_document/hover.rs
+expression: "find_hover(r#\"\n%! main.tex\n\\section{Foo}\n\\label{sec:foo}\n |\n ^^^^^^^\"#)"
+---
+{
+ "kind": "plaintext",
+ "value": "Section (Foo)"
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__string_inside_reference.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__string_inside_reference.snap
new file mode 100644
index 0000000000..cfcc196e26
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__string_inside_reference.snap
@@ -0,0 +1,8 @@
+---
+source: tests/lsp/text_document/hover.rs
+expression: "find_hover(r#\"\n%! main.bib\n@string{foo = \"Foo\"}\n@string{bar = \"Bar\"}\n@article{baz, author = bar}\n |\n ^^^\"#)"
+---
+{
+ "kind": "plaintext",
+ "value": "Bar"
+}
diff --git a/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap
new file mode 100644
index 0000000000..accf4a875c
--- /dev/null
+++ b/support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap
@@ -0,0 +1,38 @@
+---
+source: tests/lsp/text_document/inlay_hint.rs
+expression: "find_hints(r#\"\n%! main.tex\n\\documentclass{article}\n\\usepackage{caption}\n\\begin{document}\n\\section{Foo}\\label{sec:foo}\n\\section{Bar}\\label{sec:bar}\n\\subsection{Baz}\\label{sec:baz}\n\\begin{figure}\n Test\n \\label{fig:qux}\n \\caption{Qux}\n\\end{figure}\n\\end{document}\n |\n\n%! main.aux\n\\relax \n\\providecommand*\\caption@xref[2]{\\@setref\\relax\\@undefined{#1}}\n\\newlabel{fig:qux}{{\\caption@xref {fig:qux}{ on input line 15}}{1}}\n\\@writefile{lof}{\\contentsline {figure}{\\numberline {1}{\\ignorespaces Qux\\relax }}{1}{}\\protected@file@percent }\n\\@writefile{toc}{\\contentsline {section}{\\numberline {1}Foo}{1}{}\\protected@file@percent }\n\\newlabel{sec:foo}{{1}{1}}\n\\@writefile{toc}{\\contentsline {section}{\\numberline {2}Bar}{1}{}\\protected@file@percent }\n\\newlabel{sec:bar}{{2}{1}}\n\\@writefile{toc}{\\contentsline {subsection}{\\numberline {2.1}Baz}{1}{}\\protected@file@percent }\n\\newlabel{sec:baz}{{2.1}{1}}\n\\gdef \\@abspage@last{1}\"#)"
+---
+[
+ {
+ "position": {
+ "line": 3,
+ "character": 27
+ },
+ "label": "Section 1 (Foo)",
+ "paddingLeft": true
+ },
+ {
+ "position": {
+ "line": 4,
+ "character": 27
+ },
+ "label": "Section 2 (Bar)",
+ "paddingLeft": true
+ },
+ {
+ "position": {
+ "line": 5,
+ "character": 30
+ },
+ "label": "Subsection 2.1 (Baz)",
+ "paddingLeft": true
+ },
+ {
+ "position": {
+ "line": 8,
+ "character": 18
+ },
+ "label": "Figure fig:qux: Qux",
+ "paddingLeft": true
+ }
+]
diff --git a/support/texlab/src/tests/workspace.rs b/support/texlab/tests/lsp/workspace.rs
index 15e0679dea..15e0679dea 100644
--- a/support/texlab/src/tests/workspace.rs
+++ b/support/texlab/tests/lsp/workspace.rs
diff --git a/support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_bibtex.snap b/support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_bibtex.snap
index 16963641bf..0c2e328570 100644
--- a/support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_bibtex.snap
+++ b/support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_bibtex.snap
@@ -1,13 +1,14 @@
---
-source: src/tests/workspace/symbol.rs
-expression: result.actual_symbols
+source: tests/lsp/workspace/symbol.rs
+expression: "find_symbols(FIXTURE, \"bibtex\")"
---
[
{
- "deprecated": false,
+ "name": "foo",
"kind": 24,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.bib",
+ "uri": "file:///main.bib",
"range": {
"start": {
"line": 0,
@@ -18,14 +19,14 @@ expression: result.actual_symbols
"character": 14
}
}
- },
- "name": "foo"
+ }
},
{
- "deprecated": false,
+ "name": "bar",
"kind": 15,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.bib",
+ "uri": "file:///main.bib",
"range": {
"start": {
"line": 2,
@@ -36,7 +37,6 @@ expression: result.actual_symbols
"character": 20
}
}
- },
- "name": "bar"
+ }
}
]
diff --git a/support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_figure.snap b/support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_figure.snap
index 1b1d2371a4..090fe25045 100644
--- a/support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_figure.snap
+++ b/support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_figure.snap
@@ -1,13 +1,14 @@
---
-source: src/tests/workspace/symbol.rs
-expression: result.actual_symbols
+source: tests/lsp/workspace/symbol.rs
+expression: "find_symbols(FIXTURE, \"figure\")"
---
[
{
- "deprecated": false,
+ "name": "Figure 1: Bar",
"kind": 6,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 15,
@@ -18,7 +19,6 @@ expression: result.actual_symbols
"character": 12
}
}
- },
- "name": "Figure 1: Bar"
+ }
}
]
diff --git a/support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_item.snap b/support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_item.snap
index ed45c13cf1..6f739ffb29 100644
--- a/support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_item.snap
+++ b/support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_item.snap
@@ -1,13 +1,14 @@
---
-source: src/tests/workspace/symbol.rs
-expression: result.actual_symbols
+source: tests/lsp/workspace/symbol.rs
+expression: "find_symbols(FIXTURE, \"item\")"
---
[
{
- "deprecated": false,
+ "name": "1",
"kind": 22,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 24,
@@ -18,14 +19,14 @@ expression: result.actual_symbols
"character": 28
}
}
- },
- "name": "1"
+ }
},
{
- "deprecated": false,
+ "name": "2",
"kind": 22,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 25,
@@ -36,14 +37,14 @@ expression: result.actual_symbols
"character": 28
}
}
- },
- "name": "2"
+ }
},
{
- "deprecated": false,
+ "name": "3",
"kind": 22,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 26,
@@ -54,7 +55,6 @@ expression: result.actual_symbols
"character": 28
}
}
- },
- "name": "3"
+ }
}
]
diff --git a/support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_math.snap b/support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_math.snap
index d4cea99cc5..6e63e65aa4 100644
--- a/support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_math.snap
+++ b/support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_math.snap
@@ -1,13 +1,14 @@
---
-source: src/tests/workspace/symbol.rs
-expression: result.actual_symbols
+source: tests/lsp/workspace/symbol.rs
+expression: "find_symbols(FIXTURE, \"math\")"
---
[
{
- "deprecated": false,
+ "name": "Equation (1)",
"kind": 14,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 9,
@@ -18,14 +19,14 @@ expression: result.actual_symbols
"character": 14
}
}
- },
- "name": "Equation (1)"
+ }
},
{
- "deprecated": false,
+ "name": "Lemma 1 (Qux)",
"kind": 13,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 33,
@@ -36,7 +37,6 @@ expression: result.actual_symbols
"character": 11
}
}
- },
- "name": "Lemma 1 (Qux)"
+ }
}
]
diff --git a/support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_section.snap b/support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_section.snap
index 3a3ef78ab2..fef2f41be6 100644
--- a/support/texlab/src/tests/workspace/snapshots/texlab__tests__workspace__symbol__filter_type_section.snap
+++ b/support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_section.snap
@@ -1,13 +1,14 @@
---
-source: src/tests/workspace/symbol.rs
-expression: result.actual_symbols
+source: tests/lsp/workspace/symbol.rs
+expression: "find_symbols(FIXTURE, \"section\")"
---
[
{
- "deprecated": false,
+ "name": "1 Foo",
"kind": 2,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 7,
@@ -18,14 +19,14 @@ expression: result.actual_symbols
"character": 14
}
}
- },
- "name": "1 Foo"
+ }
},
{
- "deprecated": false,
+ "name": "2 Bar",
"kind": 2,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 13,
@@ -36,14 +37,14 @@ expression: result.actual_symbols
"character": 12
}
}
- },
- "name": "2 Bar"
+ }
},
{
- "deprecated": false,
+ "name": "3 Baz",
"kind": 2,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 21,
@@ -54,14 +55,14 @@ expression: result.actual_symbols
"character": 15
}
}
- },
- "name": "3 Baz"
+ }
},
{
- "deprecated": false,
+ "name": "4 Qux",
"kind": 2,
+ "deprecated": false,
"location": {
- "uri": "[tmp]/main.tex",
+ "uri": "file:///main.tex",
"range": {
"start": {
"line": 29,
@@ -72,7 +73,6 @@ expression: result.actual_symbols
"character": 11
}
}
- },
- "name": "4 Qux"
+ }
}
]
diff --git a/support/texlab/tests/lsp/workspace/symbol.rs b/support/texlab/tests/lsp/workspace/symbol.rs
new file mode 100644
index 0000000000..e726ed6860
--- /dev/null
+++ b/support/texlab/tests/lsp/workspace/symbol.rs
@@ -0,0 +1,124 @@
+use insta::assert_json_snapshot;
+use lsp_types::{
+ request::WorkspaceSymbolRequest, ClientCapabilities, SymbolInformation, WorkspaceSymbolParams,
+ WorkspaceSymbolResponse,
+};
+
+use crate::fixture::TestBed;
+
+fn find_symbols(fixture: &str, query: &str) -> Vec<SymbolInformation> {
+ let test_bed = TestBed::new(fixture).unwrap();
+
+ test_bed.initialize(ClientCapabilities::default()).unwrap();
+
+ let mut symbols = match test_bed
+ .client()
+ .send_request::<WorkspaceSymbolRequest>(WorkspaceSymbolParams {
+ query: query.to_string(),
+ work_done_progress_params: Default::default(),
+ partial_result_params: Default::default(),
+ })
+ .unwrap()
+ {
+ Some(WorkspaceSymbolResponse::Flat(symbols)) => symbols,
+ Some(WorkspaceSymbolResponse::Nested(_)) => unreachable!(),
+ None => Vec::new(),
+ };
+
+ for symbol in &mut symbols {
+ symbol.location.uri = test_bed.redact(&symbol.location.uri);
+ }
+
+ symbols
+}
+
+const FIXTURE: &str = r#"
+%! main.tex
+\documentclass{article}
+\usepackage{caption}
+\usepackage{amsmath}
+\usepackage{amsthm}
+
+\begin{document}
+
+\section{Foo}\label{sec:foo}
+
+\begin{equation}\label{eq:foo}
+ Foo
+\end{equation}
+
+\section{Bar}\label{sec:bar}
+
+\begin{figure}
+ Bar
+ \caption{Bar}
+ \label{fig:bar}
+\end{figure}
+
+\section{Baz}\label{sec:baz}
+
+\begin{enumerate}
+ \item\label{itm:foo} Foo
+ \item\label{itm:bar} Bar
+ \item\label{itm:baz} Baz
+\end{enumerate}
+
+\section{Qux}\label{sec:qux}
+
+\newtheorem{lemma}{Lemma}
+
+\begin{lemma}[Qux]\label{thm:qux}
+ Qux
+\end{lemma}
+
+\end{document}
+|
+
+%! main.aux
+\relax
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Bar\relax }}{1}\protected@file@percent }
+\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
+\newlabel{fig:bar}{{1}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
+\newlabel{sec:foo}{{1}{1}}
+\newlabel{eq:foo}{{1}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
+\newlabel{sec:bar}{{2}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {3}Baz}{1}\protected@file@percent }
+\newlabel{sec:baz}{{3}{1}}
+\newlabel{itm:foo}{{1}{1}}
+\newlabel{itm:bar}{{2}{1}}
+\newlabel{itm:baz}{{3}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {4}Qux}{1}\protected@file@percent }
+\newlabel{sec:qux}{{4}{1}}
+\newlabel{thm:qux}{{1}{1}}
+
+%! main.bib
+@article{foo,}
+
+@string{bar = "bar"}"#;
+
+#[test]
+fn filter_type_section() {
+ assert_json_snapshot!(find_symbols(FIXTURE, "section"));
+}
+
+#[test]
+fn filter_type_figure() {
+ assert_json_snapshot!(find_symbols(FIXTURE, "figure"));
+}
+
+#[test]
+fn filter_type_item() {
+ assert_json_snapshot!(find_symbols(FIXTURE, "item"));
+}
+
+#[test]
+fn filter_type_math() {
+ assert_json_snapshot!(find_symbols(FIXTURE, "math"));
+}
+
+#[test]
+fn filter_bibtex() {
+ assert_json_snapshot!(find_symbols(FIXTURE, "bibtex"));
+}
diff --git a/support/texlab/texlab.1 b/support/texlab/texlab.1
index 692333db81..bdfff79498 100644
--- a/support/texlab/texlab.1
+++ b/support/texlab/texlab.1
@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
-.TH TEXLAB "1" "January 2023" "texlab 5.2.0" "User Commands"
+.TH TEXLAB "1" "February 2023" "texlab 5.3.0" "User Commands"
.SH NAME
-texlab \- manual page for texlab 5.2.0
+texlab \- manual page for texlab 5.3.0
.SH SYNOPSIS
.B texlab
[\fI\,OPTIONS\/\fR]
diff --git a/support/texlab/texlab.pdf b/support/texlab/texlab.pdf
index 4830be200f..8b172bff34 100644
--- a/support/texlab/texlab.pdf
+++ b/support/texlab/texlab.pdf
Binary files differ