diff --git a/build.gradle.kts b/build.gradle.kts index 2aa1a6016ed..978e463ab56 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -73,7 +73,7 @@ dependencies { api("org.eclipse.lsp4j", "org.eclipse.lsp4j.websocket", "0.17.0") // 1c-syntax - api("com.github.1c-syntax", "bsl-parser", "167aaad827322e09ccde4658a71152dad234de4b") { + api("com.github.ovcharenko-di", "bsl-parser", "feature~externalSource-SNAPSHOT") { exclude("com.tunnelvisionlabs", "antlr4-annotations") exclude("com.ibm.icu", "*") exclude("org.antlr", "ST4") diff --git a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java index 72352cd4404..441557602c9 100644 --- a/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java +++ b/src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/QueryToMissingMetadataDiagnosticTest.java @@ -49,8 +49,12 @@ void test() { 4, 18, 55) .hasMessageOnRange("Исправьте обращение к несуществующему метаданному \"РегистрСведений.УдалитьИмяРегистра\" в запросе", 19, 40, 74) + .hasMessageOnRange("Исправьте обращение к несуществующему метаданному \"ВнешнийИсточникДанных.ВнешнийИсточникДанных2\" в запросе", + 50, 18, 62) + .hasMessageOnRange("Исправьте обращение к несуществующему метаданному \"ВнешнийИсточникДанных.ВнешнийИсточникДанных2\" в запросе", + 66, 18, 62) - .hasSize(2); + .hasSize(4); } diff --git a/src/test/resources/diagnostics/QueryToMissingMetadataDiagnostic.bsl b/src/test/resources/diagnostics/QueryToMissingMetadataDiagnostic.bsl index 4633a42f133..de6c053997a 100644 --- a/src/test/resources/diagnostics/QueryToMissingMetadataDiagnostic.bsl +++ b/src/test/resources/diagnostics/QueryToMissingMetadataDiagnostic.bsl @@ -37,3 +37,32 @@ | РегистрСведений.рЕГИСТРСведений1 КАК Таблица"; // не ошибка Запрос2.Выполнить(); +Запрос1 = Новый Запрос; +Запрос1.Текст = "ВЫБРАТЬ + | Таблица1.Поле1 КАК Поле1 + |ИЗ + | ВнешнийИсточникДанных.ВнешнийИсточникДанных1.Таблица.Таблица1 КАК Таблица1"; // не ошибка +Запрос1.Выполнить(); + +Запрос2 = Новый Запрос; +Запрос2.Текст = "ВЫБРАТЬ + | Таблица1.Поле1 КАК Поле1 + |ИЗ + | ВнешнийИсточникДанных.ВнешнийИсточникДанных2.Таблица.Таблица1 КАК Таблица1"; // ошибка +Запрос2.Выполнить(); + +ИмяТаблицы = "Таблица10"; +Запрос3 = Новый Запрос; +Запрос3.Текст = "ВЫБРАТЬ + | Таблица1.Поле1 КАК Поле1 + |ИЗ + | ВнешнийИсточникДанных.ВнешнийИсточникДанных1.Таблица." + ИмяТаблицы + " КАК Таблица1"; // не ошибка +Запрос3.Выполнить(); + +ИмяТаблицы = "Таблица10"; +Запрос4 = Новый Запрос; +Запрос4.Текст = "ВЫБРАТЬ + | Таблица1.Поле1 КАК Поле1 + |ИЗ + | ВнешнийИсточникДанных.ВнешнийИсточникДанных2.Таблица." + ИмяТаблицы + " КАК Таблица1"; // ошибка +Запрос4.Выполнить(); diff --git a/src/test/resources/metadata/designer/Configuration.xml b/src/test/resources/metadata/designer/Configuration.xml index 1e14bdca9c8..ce5d5aaa993 100644 --- a/src/test/resources/metadata/designer/Configuration.xml +++ b/src/test/resources/metadata/designer/Configuration.xml @@ -208,6 +208,7 @@ <ScheduledJob>РегламентноеЗаданиеНесуществующийМетод</ScheduledJob> <ScheduledJob>РегламентноеЗаданиеПриватныйМетод</ScheduledJob> <ScheduledJob>РегламентноеЗаданиеПредопределенноеНесколькоПараметров</ScheduledJob> + <ExternalDataSource>ВнешнийИсточникДанных1</ExternalDataSource> </ChildObjects> </Configuration> </MetaDataObject> \ No newline at end of file diff --git "a/src/test/resources/metadata/designer/ExternalDataSources/\320\222\320\275\320\265\321\210\320\275\320\270\320\271\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\224\320\260\320\275\320\275\321\213\321\2051.xml" "b/src/test/resources/metadata/designer/ExternalDataSources/\320\222\320\275\320\265\321\210\320\275\320\270\320\271\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\224\320\260\320\275\320\275\321\213\321\2051.xml" new file mode 100644 index 00000000000..9a76c5c5a7d --- /dev/null +++ "b/src/test/resources/metadata/designer/ExternalDataSources/\320\222\320\275\320\265\321\210\320\275\320\270\320\271\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\224\320\260\320\275\320\275\321\213\321\2051.xml" @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.11"> + <ExternalDataSource uuid="5f88206e-509f-481e-8e0c-840afa34498f"> + <InternalInfo> + <xr:GeneratedType name="ExternalDataSourceManager.ВнешнийИсточникДанных1" category="Manager"> + <xr:TypeId>1af090bf-8bc3-43d6-abf7-0f7185073f81</xr:TypeId> + <xr:ValueId>3c3a22d1-7a71-4fab-93d5-373d807ce245</xr:ValueId> + </xr:GeneratedType> + <xr:GeneratedType name="ExternalDataSourceTablesManager.ВнешнийИсточникДанных1" category="TablesManager"> + <xr:TypeId>4184dd6b-60b5-4353-afe9-476050c8207a</xr:TypeId> + <xr:ValueId>aa4ec83e-cecb-4abe-b314-8a279f3b8730</xr:ValueId> + </xr:GeneratedType> + <xr:GeneratedType name="ExternalDataSourceCubesManager.ВнешнийИсточникДанных1" category="CubesManager"> + <xr:TypeId>f1a6fe6f-90ac-4e17-86d0-9a700091d95a</xr:TypeId> + <xr:ValueId>16a8e401-e884-41d8-857a-7fa4456315f7</xr:ValueId> + </xr:GeneratedType> + </InternalInfo> + <Properties> + <Name>ВнешнийИсточникДанных1</Name> + <Synonym/> + <Comment/> + <DataLockControlMode>Automatic</DataLockControlMode> + </Properties> + <ChildObjects> + <Table>Таблица1</Table> + </ChildObjects> + </ExternalDataSource> +</MetaDataObject> \ No newline at end of file diff --git "a/src/test/resources/metadata/designer/ExternalDataSources/\320\222\320\275\320\265\321\210\320\275\320\270\320\271\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\224\320\260\320\275\320\275\321\213\321\2051/Tables/\320\242\320\260\320\261\320\273\320\270\321\206\320\2601.xml" "b/src/test/resources/metadata/designer/ExternalDataSources/\320\222\320\275\320\265\321\210\320\275\320\270\320\271\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\224\320\260\320\275\320\275\321\213\321\2051/Tables/\320\242\320\260\320\261\320\273\320\270\321\206\320\2601.xml" new file mode 100644 index 00000000000..b3bd207fdbb --- /dev/null +++ "b/src/test/resources/metadata/designer/ExternalDataSources/\320\222\320\275\320\265\321\210\320\275\320\270\320\271\320\230\321\201\321\202\320\276\321\207\320\275\320\270\320\272\320\224\320\260\320\275\320\275\321\213\321\2051/Tables/\320\242\320\260\320\261\320\273\320\270\321\206\320\2601.xml" @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="UTF-8"?> +<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.11"> + <Table uuid="ed664505-7033-43c4-a844-242010a82c23"> + <InternalInfo> + <xr:GeneratedType name="ExternalDataSourceTableManager.ВнешнийИсточникДанных1.Таблица1" category="Manager"> + <xr:TypeId>f293cd9a-813b-4871-b1e7-5219e98cc704</xr:TypeId> + <xr:ValueId>3b51e46e-d56b-489e-a480-2c6a40e61c7f</xr:ValueId> + </xr:GeneratedType> + <xr:GeneratedType name="ExternalDataSourceTableObject.ВнешнийИсточникДанных1.Таблица1" category="Object"> + <xr:TypeId>45681edf-cf03-457a-91ec-900dcaf93300</xr:TypeId> + <xr:ValueId>a1a09e26-2a36-4025-b5cf-4584c6a2cb13</xr:ValueId> + </xr:GeneratedType> + <xr:GeneratedType name="ExternalDataSourceTableRef.ВнешнийИсточникДанных1.Таблица1" category="Ref"> + <xr:TypeId>46034421-e7c6-473e-a719-7d83872ca163</xr:TypeId> + <xr:ValueId>6cd2a74a-68a2-4ae0-a868-8f30c483568d</xr:ValueId> + </xr:GeneratedType> + <xr:GeneratedType name="ExternalDataSourceTableList.ВнешнийИсточникДанных1.Таблица1" category="List"> + <xr:TypeId>0fa79f74-4bbd-4656-b60c-37f7d59bce79</xr:TypeId> + <xr:ValueId>ba936a9a-d60a-4f7a-8478-e7725727e77d</xr:ValueId> + </xr:GeneratedType> + <xr:GeneratedType name="ExternalDataSourceTableRecord.ВнешнийИсточникДанных1.Таблица1" category="Record"> + <xr:TypeId>c947c4fd-75cf-4b61-9202-12e3e22f4c1b</xr:TypeId> + <xr:ValueId>22aab3a5-a132-40a7-aa20-42ecad0184eb</xr:ValueId> + </xr:GeneratedType> + <xr:GeneratedType name="ExternalDataSourceTableRecordSet.ВнешнийИсточникДанных1.Таблица1" category="RecordSet"> + <xr:TypeId>c498636f-11f4-40f4-bddf-498f85534a1c</xr:TypeId> + <xr:ValueId>42911c5b-d9a1-4197-9b32-95e57d930c01</xr:ValueId> + </xr:GeneratedType> + <xr:GeneratedType name="ExternalDataSourceTableRecordKey.ВнешнийИсточникДанных1.Таблица1" category="RecordKey"> + <xr:TypeId>e6512286-f03c-4e75-86a1-5ab626774f61</xr:TypeId> + <xr:ValueId>c8e6130a-8a0c-4755-9fb1-7a21bb2da092</xr:ValueId> + </xr:GeneratedType> + <xr:GeneratedType name="ExternalDataSourceTableRecordManager.ВнешнийИсточникДанных1.Таблица1" category="RecordManager"> + <xr:TypeId>dd315100-5cfd-4a58-9326-11829b89d62e</xr:TypeId> + <xr:ValueId>3296cfea-a9c6-45cf-8b32-8e48e2b1fe4b</xr:ValueId> + </xr:GeneratedType> + </InternalInfo> + <Properties> + <Name>Таблица1</Name> + <Synonym/> + <Comment/> + <TableType>Table</TableType> + <NameInDataSource/> + <ExpressionInDataSource/> + <TableDataType>ObjectData</TableDataType> + <KeyFields> + <xr:Field>ExternalDataSource.ВнешнийИсточникДанных1.Table.Таблица1.Field.Поле1</xr:Field> + </KeyFields> + <PresentationField/> + <ParentField/> + <UnfilledParentValue xsi:nil="true"/> + <Characteristics/> + <UseStandardCommands>true</UseStandardCommands> + <QuickChoice>false</QuickChoice> + <InputByString> + <xr:Field>ExternalDataSource.ВнешнийИсточникДанных1.Table.Таблица1.Field.Поле1</xr:Field> + </InputByString> + <CreateOnInput>Auto</CreateOnInput> + <SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString> + <ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString> + <ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput> + <DefaultObjectForm/> + <DefaultRecordForm/> + <DefaultListForm/> + <DefaultChoiceForm/> + <ObjectPresentation/> + <ExtendedObjectPresentation/> + <RecordPresentation/> + <ExtendedRecordPresentation/> + <ListPresentation/> + <ExtendedListPresentation/> + <Explanation/> + <IncludeHelpInContents>false</IncludeHelpInContents> + <ReadOnly>false</ReadOnly> + <TransactionsIsolationLevel>Auto</TransactionsIsolationLevel> + <DataVersionField/> + <EditType>InDialog</EditType> + <BasedOn/> + <DataLockFields/> + <DataLockControlMode>Automatic</DataLockControlMode> + </Properties> + <ChildObjects> + <Field uuid="464b186e-c14b-4e7e-858b-139594f7e723"> + <Properties> + <Name>Поле1</Name> + <Synonym/> + <Comment/> + <Type> + <v8:Type>xs:string</v8:Type> + <v8:StringQualifiers> + <v8:Length>10</v8:Length> + <v8:AllowedLength>Variable</v8:AllowedLength> + </v8:StringQualifiers> + </Type> + <PasswordMode>false</PasswordMode> + <Format/> + <EditFormat/> + <ToolTip/> + <MarkNegatives>false</MarkNegatives> + <Mask/> + <MultiLine>false</MultiLine> + <ExtendedEdit>false</ExtendedEdit> + <MinValue xsi:nil="true"/> + <MaxValue xsi:nil="true"/> + <FillFromFillingValue>false</FillFromFillingValue> + <FillValue xsi:type="xs:string"/> + <FillChecking>DontCheck</FillChecking> + <ChoiceParameterLinks/> + <ChoiceParameters/> + <QuickChoice>Auto</QuickChoice> + <CreateOnInput>Auto</CreateOnInput> + <ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput> + <ChoiceForm/> + <NameInDataSource/> + <ReadOnly>false</ReadOnly> + <AllowNull>false</AllowNull> + </Properties> + </Field> + </ChildObjects> + </Table> +</MetaDataObject> \ No newline at end of file