Code Monkey home page Code Monkey logo

1c-syntax's Introduction

1c-syntax

Join the chat at https://gitter.im/xDrivenDevelopment/1c-syntax Build Status

Syntax definition rules for 1C:Enterprise 8 for tmLanguage-based text editors (Sublime Text, Atom and VS Code).

Цель репозитория

Данный репозиторий создан для консолидации работ по развитию пакетов, добавляющих поддержку языка 1С:Предприятие 8 для текстовых редакторов Atom, Sublime Text и Visual Studio Code.
Под каждый из редакторов создан отдельный репозиторий и опубликован соответствующий пакет на площадке распространения пакетов:

Репозиторий Пакет
Sublime Text Package control
Atom Atom.io/packages
VS Code Marketplace

Разработка описания грамматики языка на основе формата TextMate ведется в специальном YAML-файле, описание которого и примеры использования вы можете найти здесь.

Связи с другими проектами

Проект 1c-syntax не органичивается репозиториями с описанием грамматики. В рамках наших активностей так же выполнялись/выполняются работы по направлениям:

  • Подсветка синтаксиса для Github: библиотека linguist
  • Подсветка синтаксиса GitLab: библиотека rouge и братский проект 1c-syntax-for-GitLab
  • Подсветка синтаксиса в редакторе Ace: репозиторий ace
  • Подсветка синтаксиса в редакторе Vim: репозиторий vim-language-1c-bsl за авторством @andreevlex
  • Подсветка синтаксиса в редакторах с поддержкой GtkSourceView: библиотека GtkSourceView, репозиторий gtksourceview-1c-bsl
  • Запуск скриптов OneScript в редакторе Atom: пакеты atom-script и atom-build
  • Модули подсветки brush-bsl и brush-sdbl для js библиотеки syntaxhighlighter. Эти модули должны работать в JIRA.

Планируются работы по направлениям:

  • Подсветка синтаксиса в редакторе CodeMirror - для поддержки подсветки в git-сервере BitBucket
  • Обновление подсветки в редакторе Highlight.js - для улучшенной поддержки подсветки в git-сервере Gogs и приведения идентификаторов языка к единому виду

Дополнительные возможности

Помимо, собственно, грамматики, мы пытаемся добавить в редакторы дополнительные возможности, которые могут упростить работу с 1С.
На данный момент список таких фич выглядит вот так:

Функциональность \ Поддержка в редакторах Atom Sublime Text VS Code
Подсветка текста запроса внутри модуля и отдельно Есть Есть Есть
Блочное комментирование через // Есть Есть Есть
Список процедур и функций текущего файла Есть Есть Есть
Список процедур и функций рабочего каталога Есть Есть Есть
Переход к определению процедур и функций Есть Есть Есть
Автодополнение процедур и функций глобального контекста Есть Есть Есть
Автодополнение процедур и функций, уникальных для OneScript Нет Нет Есть
Сниппеты (шаблоны текста) Есть Есть Есть
Использование автоматических отступов по ключевым словам Есть Есть Есть
Автоматическое выравнивание блока кода или файла целиком Есть Есть Есть
Разворачивание конструкций вида ++/+= и подобных по нажатию Tab Есть Есть Есть
Автоматическое добавление символа | при добавлении новой строки во время редактирования строкового литерала Есть Есть Есть
Автоматическое добавление символов // при добавлении новой строки во время редактирования комментария по нажатию Shift-Enter Есть Есть Есть
Запуск скриптов .os/.bsl с помощью OneScript Есть Есть Есть
Линтер на базе oscript -check Есть Есть Есть
Использование отступов в виде 4х-символьных табов Есть Есть Есть
Поиск мест использования процедур Нет Нет Есть
Информация о процедуре Нет Нет Есть
Предварительный просмотр определения процедуры Нет Нет Есть
Автодополнение через точку Нет Нет Есть
Подсказка по параметрам процедур Нет Нет Есть
Поиск определения Нет Нет Есть
Поддержка английского языка конфигурации Нет Нет Есть
Создание описания метода Нет Нет Есть
Синтакс-помощник по функциям глобального контекста Нет Нет Есть
Синтакс-помощник по методам oscript Нет Нет Есть
Автоматическая вставка скобок Нет Нет Есть
Динамические шаблоны Нет Нет Есть

Информацию об использовании каждой из возможностей вы найдете в README соответствующего редактора.

Сотрудничество

Если вы разработчик и хотите помочь с разработкой пакетов и/или грамматикой, пожалуйста, ознакомьтесь с гайдом для разработчиков.
Уже поставленные задачи по разработке можно найти на странице Issues данного репозитория.

1c-syntax's People

Contributors

artbear avatar ava57r avatar bambr1975 avatar cryptedsky avatar gitter-badger avatar greenkeeper[bot] avatar leoniv avatar nivanchenko avatar nixel2007 avatar rgistzev avatar snyk-bot avatar vsuh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

1c-syntax's Issues

[Atom] Публикация пакета

Ссылка на гайд по публикации: https://atom.io/docs/v1.2.4/hacking-atom-package-word-count#publish-your-package

Действия, которые необходимо выполнить для публикации пакета:

  • В файле package.json есть поля name, description и repository.
  • В файле package.json есть поле version со значением "0.0.0".
  • В файле package.json есть поле engines, содержащую указание версий Atom, например "engines": {"atom": ">=0.50.0"}.
  • В вашем пакете есть файл README.md в корне репозитория. (необходимо наполнение файла)
  • Ваш пакет - это репозиторий git, который был опубликован на GitHub.

[Atom] oscript-запускатель

Для разработки запускателя oscript в Atom, видимо, так же потребуется описывать часть процедур по запуску в coffee файлах внутри пакета.
Пример пакета, работающего по ctrl+r https://github.com/lsegal/atom-runner

Точка с запятой в определении процедуры

Если в определении процедуры/функции после скобок есть точка с запятой (а синтаксис это позволяет), то вся функция начинает подсвечиваться, кхм, странно :)
default

Если указан Экспорт без пробела, то так же рисуется некорректно
default

Нет раскраски инструкций препроцессору

Из обсуждения #13 (comment)

На данный момент инструкции препроцессору объявлены как meta.preprocessor.bsl.
Для meta по умолчанию нет раскраски.

Атом, например, вроде позволяет инлайнить кусочки стилей в основной стиль

Либо поступить таким же образом (предусмотреть решение для всех редакторов), либо придумать что-то другое.

В автодополнение попадают символы из комментариев

Тоже пожелание от коллеги.
Если есть закомментированный кусок кода:

// Процедура ТестоваяПроцедура()
// А = 0;
// // Даже просто с обычными комментариями
// КонецПроцедуры

То в автокомплит попадают все токены из комментов: и ТестоваяПроцедура, и Даже, и обычными, все подряд. (подтверждено на ST)

Не знаю, можно ли это как-то настроить, но как пожелание зафиксирую.

1.0.6

Грамматика

Настройки блочного комментирования

В Атоме точно есть настройка, каким образом комментировать блок выделенного текста через Ctrl-/

Сейчас Атом ставит стандартные /* ... */. В конфигах синтаксис-пакета можно переопределить.

Проверить, что в остальных редакторах блочное комментирование работает корректно либо так же поправить.

Учет ё

Проверить все регулярки на попадание буквы "ё" - она не попадает в стандартный блок [а-я]. Точно надо добавить в определение параметра в процедуре

tasks.json

Урра!
На VSC с помощью Андрея @EvilBeaver заработал разбор сообщений об ошибках. Теперь по F8 можно перескакивать между ошибочными строками.

см. файл VSC/[PROJECT_DIR]/.vscode/tasks.json

[VSC] OScript запускатель

By @vsuh

таки, определились с репозиторием? тогда сюда.
При редактировании в vsc *.os файла нажать F1 написать task и нажать Enter

Попадаем в инструмент Tasks: Configure task runner который реализован в виде файла tasks.json в специальном каталоге .vscode текущего проекта. Вставить туда следующий текст:

tasks.json

{
"version": "0.1.0",
"windows": {
    "command": "oscript.exe"
},
"linux": {
    "command": "/opt/bin/oscript"
},
"isShellCommand": true,
// Show the output window only if unrecognized errors occur.
"showOutput": "silent",
"args": [
    "-encoding=utf-8"
],
"tasks": [
    {
        "taskName": "Compile",
        "args": [
            "-compile",
            "${file}"
        ],
        "echoCommand": true,
        "showOutput": "always",
        "suppressTaskName": true,
        "isBuildCommand": true
    },
    {
        "taskName": "Run",
        "args": [
            "${file}"
        ],
        //"echoCommand": true,
        "showOutput": "always",
        "suppressTaskName": true,
                 "problemMatcher": "$gulp-tsc",
        "isBuildCommand": true
    }
]
}

В результате в списке задач появится две задачи Compile и Run вызвать их можно опять же комбинацией F1 tasks: run task или назначить комбинацию клавиш командой File -> Preferences -> Keyboard Shortcuts на команду workbench.action.tasks.runTask.

Кстати, выражение "isBuildCommand": true в задаче Compile обозначает, что ее можно запустить комбинацией Ctrl-Shift-B

Текст написан по мотивам официальной документации на VSC

В следующий раз, уважаемые читатели, мы поговорим о настройке блока problemMatcher, которая позволит нам переходить к выражению в коде, вызвавшему ошибку.

куда делись секции foldingStartMarker и foldingStopMarker или их изначально не было?

@vsuh
а куда делись секции foldingStartMarker и foldingStopMarker или их изначально не было?
вдруг, в будущем появится возможность группировки блоков

<key>foldingStartMarker</key>
<string>^(if|while|for|Функция|Процедура|Если|Пока|Для)</string>
<key>foldingStopMarker</key>
<string>(enddo|endif|КонецФункции|КонецПроцедуры|КонецЕсли|КонецЦикла)$</string>

из https://bitbucket.org/EvilBeaver/1script/issues/196/encoding

Баг в подсветке VSC

by @vsuh
Вот такая процедура у меня настрадалась:
image

Переписал функцию, заменив все русские литералы на английские - подсветка стала кошерная.
А ломается она даже если в тесте блока есть хоть один русский литерал.
image

by @bambr1975
Воспроизвести не получилось

by @nixel2007
Видимо, это проблемы именно VSC.
st
atom
vsc

VSC как-то странно и очень жадно определяет токены. Если в

Если Ош.Причина ...

перед Ош поставить несколько пробелов, то он перестает их подкрашивать.
Тоже самое с раскраской строковых констант и комментариев - добавить пробелы и все ок.

Цветовая схема

Нужна классическая цветовая схема, как в конфигураторе, плюс, как в Eclipse. Однозначно будут просить.

Список процедур и функций

Добавить возможность открывать список функций текущего файла или описать пакеты/настройки, которые позволят это сделать.

В Atom, например, при установке пакета https://atom.io/packages/goto и нажатии ctrl-r открывается список всех процедур и функций.
Помню, эту возможность хотел иметь @artbear

Перевод строки в многострочной строке

Появилось пожелание от коллеги:

Если набирается, например:

Запрос.Текст =
"ВЫБРАТЬ

и нажимается Enter, то на следующую строку надо добавлять символ |. Говорят, когда это показали на презенташке EDT, народ был очень доволен.

Отделить build и publish процедуры

  1. Сборку необходимо производить в отдельном каталоге build, добавить его в .gitignore
  2. Необходимо отделить процедуры сборки и публикации пакета на 2 разных скрипта.
  3. Выделить отдельные для каждого из пакетов команды публикации в отдельные подскрипты, вызываемые скриптом publish

Таким образом, публикация пакетов будет осуществляться командой (условно)
oscript build.os && oscript publish.os

Для отладки и разработки же будет достаточно просто oscript build.os

[VSC] Сниппеты

By @vsuh

Отдельная история по code snippets.

Если мы решили присвоить языку OneScript код onescript и, соответственно, указали этот код в выражениях name, contributes.languages.id и contributes.grammars.language файла package.json

2015-12-03_11-40-15

, то мы имеем полное право создать файл сниппетов onescript.json в каталоге %userprofile%\AppData\Roaming\Code\User\snippets\ который будет действовать в файлах с выбранным языком onescript примерно такого содержания, :

{
"Цикл для каждого": {
    "prefix": "дляк",
    "body": [
        "Для Каждого нн Из $1 Цикл",
        "    $2;",
        "КонецЦикла;"
    ],
    "description": "Цикл Для каждого нн Из..."
},
"Попытка с исключением": {
    "prefix": "попи",
    "body": [
        "Попытка",
        "   $1",
        "Исключение",
        "   Сообщить(ОписаниеОшибки());",
        "КонецИсключения;",
        "$2"
    ],
    "description": "попытка с исключением"
}
}

[Wiki] Обсуждение

Раз в самой вики обсуждения нет, давайте здесь обсуждать.
Нужны ли еще две страницы с описанием ручной установки синтаксиса в Atom и Sublime text?
Или там будет только описание процедуры запуска установочных пакетов.

Go to declaration

В Атоме и в VSC не работает функция GoTo definition.
В ST все штатно, на основании грамматики.

Релизное управление

Сейчас есть набор проблем:

  • неудобно собирать изменения для формирования changelog
  • В описании релиза непонятно, что входит в релизы для разных редакторов.
  • непонятен roadmap или хотя бы ближайшие планы на реализацию.

Например, @nixel2007 выпустил релиз https://github.com/xDrivenDevelopment/sublime-language-1c-bsl/releases/tag/v1.0.3
Как узнать, что в него вошло, изучая страницу релиза?

Для решения этих проблем предлагаю перейти на релизное управление, предлагаемое Github.
Используем milestone для наименования релиза и включения всех issue в релиз.
Потом удобно собирать/изучать/публиковать изменения.

@xDrivenDevelopment/1c-syntax что скажете?

Инструкция разработчика

Нужно пошаговое описание - как настроить окружение разработчика, который захочет внести правки в пакеты. Как собрать пакеты, как отладить и т.п.

Билдер из YAML-tmLanguage. Инфраструктура

Я сейчас использую пакет https://github.com/SublimeText/AAAPackageDev для SublimeText, который по Ctrl+B из файла YAML-tmLanguage делает tmLanguage.

Появляется человеческий фактор - забыл сделать билд, отредактировал через сайт только один файл и все такое прочее.
Надо подумать над инфраструктурой репозитариев, созданием пакетов для разных редакторов.

Свойства глобального контекста

Думаю, стоит ли добавлять свойства глобального контекста.
default

И если стоит, то все, или некоторые (например, не добавлять менеджеры)

Мысли? @xDrivenDevelopment/1c-syntax @bambr1975

[GitHub] Подсветка синтаксиса

На досуге просматривал формат подвестки синтаксиса, который использует github.
В его основе лежит сторонняя библиотека, которая импортирует tmBundle с грамматикой.

Как поразительно соблазительную и даже относительно реальную можно поставить цель добавить поддержку синтаксиса 1С в сам GitHub. Мне кажется это будет оооочень круто.

Не совсем, правда, понятно, как к этому может отнестись сама 1С.

Лицензирование

По умолчанию пакеты для редакторов лицензируются под MIT.
Часть продуктов xDD лицензируется под Apache, vanessa-stack вообще под BSD (хотя это продукт silverbulleters и к организации xDD относится постольку-поскольку).

Что выберем?

Нет подсветки для точки и для скобок

Расстроила подсветка https://github-lightshow.herokuapp.com/?utf8=%E2%9C%93&scope=from-url&grammar_url=https%3A%2F%2Fgithub.com%2FxDrivenDevelopment%2Fvsc-language-1c-bsl%2Fblob%2Fmaster%2Fsyntaxes%2F1c.tmLanguage&grammar_text=&code_source=from-url&code_url=https%3A%2F%2Fgithub.com%2F1C-Company%2Fdt-demo-configuration%2Fblob%2Fmaster%2FDemoConfDT%2FCatalog.%25D0%2592%25D1%2585%25D0%25BE%25D0%25B4%25D1%258F%25D1%2589%25D0%25B8%25D0%25B5%25D0%259F%25D0%25B8%25D1%2581%25D1%258C%25D0%25BC%25D0%25B0.Form.%25D0%25A4%25D0%25BE%25D1%2580%25D0%25BC%25D0%25B0%25D0%25AD%25D0%25BB%25D0%25B5%25D0%25BC%25D0%25B5%25D0%25BD%25D1%2582%25D0%25B0.Form.Module.bsl&code=

Во-первых, сразу видно, что нет подсветки для точек и скобок.
Во-вторых, почему-то не подсвечиваются конструкции, заданные с метасимволом \b - подсвечиваются только те, у которых этого метасимвола не задано.

@nixel2007 , что думаешь по этому поводу?

Переработать README.md

Привести README к более человеколюбивому виду.
Более подробно, что это за репозиторий, таблицу со ссылками повыше, добавить к таблице описание. Информацию, касающуюся только разработки перенести в Contributing.md (но минимальное упоминание про TextMate надо оставить).

README должно удовлетворять двум условиям:

  1. Человек, который наткнулся на этот репо в поиске пакета для своего редактора, может быстро и понятно перейти в нужный ему репо/пакетный менеджер
  2. Человек, который пришел сюда помогать с разработкой, может быстро понять, что к чему, и уйти читать Contributing.md

Сформировать таблицу фич и вставить в readme/wiki

Типа вот такой

Функционал ST Atom VSC
Список процедур и функций Встроенный, ctrl-r/ctrl-shif-r Требуется установить пакет goto, ctrl-r/ctrl-shif-r Не поддерживается
Перейти к определению (GoTo definition) Встроенный, F12 Требуется установить пакет goto, Ctrl-alt-down Не поддерживается
Блочное комментирование Встроенный, ctrl-/ Встроенный, ctrl-/ Встроенный, ctrl-K ctrl-C

[ST] Некорректно подсвечивает комментарий, если это последняя строка файла

Последний комментарий в файле, если это последняя строка, не подсвечивается как комментарий, а должен.

Скриншот: https://yadi.sk/i/pwzfkTAlmdHUj

Если добавить еще одну строку (даже просто перевод строки), то комментарий подстветка комментария станет правильной.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.