Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch intell Excluding Merge-Ins
This is equivalent to a diff from c99e49c574 to a082c3f073
2012-04-24
| ||
16:09 | Добавлен скрипт показа функц/процедур с группировкой по контексту компиляции НаСервере, НаКлиенте, НаСервереБезКонтекста и т.д. check-in: 91f9bf4725 user: sosnae tags: trunk | |
04:39 | Синхронизировал с основной веткой Leaf check-in: a082c3f073 user: kuntashov tags: intell | |
04:37 | Синхронизировал с основной веткой. check-in: 45015b3ec4 user: kuntashov tags: refactoring-tool-script | |
2012-04-23
| ||
04:45 | Исправлена ошибка http://snegopat.ru/forum/viewtopic.php?f=3&t=90&p=1992#p1992. check-in: c99e49c574 user: kuntashov tags: trunk | |
2012-04-22
| ||
13:36 | Добавлена возможность группировки результатов поиска по методам. Добавлен вывод пиктограммы процедуры/функции. Для идентификации методов больше (пока?) не используем SyntaxAnalysis. check-in: 29f57a9af7 user: kuntashov tags: trunk | |
2011-11-17
| ||
10:34 | Начат Inlellisense для Снегопата. Реализован класс IntsManager, управляющий подгрузкой информации о типах из внешних ints-файлов (Важно! Формат отличается от ints-файлов для ОпенКонфа!) check-in: 29cb1a309e user: kuntashov tags: intell | |
Added Intellisense.js.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
$engine JScript $uname Intellisence $dname Умная подсказка после точки $addin global $addin stdlib var _DEBUG_MODE = true; function _debug(message) { if (_DEBUG_MODE) Message(message); } //////////////////////////////////////////////////////////////////////////////////////// //// IntsManager //// /** Класс отвечающий за загрузку информации о типах методов из Ints-файлов и кэширование этих данных. Параметр - каталог, в котором искать Ints-файлы. Подгрузка данных "ленивая", т.е. осуществляется по первому запросу информации о типе. О формате ints-файлов см. в описании метода loadTypeFromFile(). */ function IntsManager(intsFolder) { this.allTypesInfo = {}; if (intsFolder) { this._intsFolder = intsFolder; } else { /* Если каталог не задан, используем каталог по умолчанию. Сознательно не помещаю его на один уровень со скриптами, чтобы ints-файлы не попадали в репозиторий: файлов будет много, и это избыточная информация, которую всегда при отсутствии можно восстановить по файлу <MainFolder>\core\types\v8types.txt */ var mainFolder = profileRoot.getValue("Snegopat/MainFolder"); this._intsFolder = mainFolder + 'ints'; } } /** Возвращает объект - информацию о методе. В качестве параметров передается имя типа и имя метода, информацию о котором надо получить. */ IntsManager.prototype.getMethodInfo = function (typeName, methodName) { var typeInfo = this._getTypeInfo(typeName); return typeInfo.m[methodName]; } /** Возвращает строку - имя типа возвращаемого методом methodName объекта типа typeName значения.*/ IntsManager.prototype.getMethodReturnType = function (typeName, methodName) { var methodInfo = this.getMethodInfo(typeName, methodName); if (!methodInfo) { _debug('У объекта типа"' + typeName + '" нет методов с именем "' + methodName + '"!'); return null; } return methodInfo.r; } /** Возвращает информацию о свойстве propName объекта с именем typeName. */ IntsManager.prototype.getPropertyInfo = function (typeName, propName) { var typeInfo = this._getTypeInfo(typeName); return typeInfo.p[propName]; } /** Возвращает информацию о типе с именем typeName. Если тип не найден в кеше, подгружает его из ints-файла. */ IntsManager.prototype._getTypeInfo = function(typeName) { var typeInfo = this.getTypeInfo(typeName); if (!typeInfo) typeInfo = this.loadTypeInfoFromFile(typeName); if (!typeInfo) { _debug('Информация о типе "' + typeName + '" не найдена!'); return null; } return typeInfo; } IntsManager.prototype.getIntsFolder = function () { return this._intsFolder; } IntsManager.prototype.getFullIntsFilePath = function (typeName) { var intsFolder = this.getIntsFolder(); return intsFolder + '\\' + typeName + '.ints'; } /** Загружает информацию о типе из ints-файла. Формат ints-файла. Имя файла: <ИмяТипа>.ints Содержимое файла: meth(<ИмяТипа>, <ИмяМетода>, <ИмяТипаВозвращаемогоЗначения>,<РежимДоступности>); prop(<ИмяТипа>, <ИмяСвойства>, <ИмяТипаСвойства>,<РежимДоступности>); */ IntsManager.prototype.loadTypeInfoFromFile = function(typeName) { var file = v8New('File', this.getFullIntsFilePath(typeName)); if (!file.Exist()) { _debug('Ints-файл ' + file.FullName + ' не существует!'); return null; } var textDoc = v8New('TextDocument'); textDoc.Read(file.FullName); try { this.addTypeInfoFromString(textDoc.GetText()); } catch (e) { Message('При чтении ints-файла ' + file.FullName + " произошла ошибка."); _debug(e.message); /* TODO: в не-дебаг режиме запоминать неудачные чтения, чтобы не производить во время обычной работы повторные попытки чтения. */ } } IntsManager.prototype.addTypeInfoFromString = function(codeText) { var _intsManager = this; var meth = function (typeName, methodName, returnType, accessability) { var typeInfo = _intsManager.getTypeInfo(typeName, true); typeInfo.m[methodName.toLowerCase()] = { n: methodName, r: returnType, a: accessability }; }; var prop = function(typeName, propName, propTypeName, accessability) { var typeInfo = _intsManager.getTypeInfo(typeName, true); typeInfo.p[propName.toLowerCase()] = { n: propName, t: propTypeName, a: accessability }; }; eval(codeText); } IntsManager.prototype.getTypeInfo = function(typeName, createIfNotFound) { var typeInfo = this.allTypesInfo[typeName.toLowerCase()]; if (!typeInfo && createIfNotFound) { typeInfo = { n: typeName, m:{}, p:{}}; this.allTypesInfo[typeName.toLowerCase()] = typeInfo; } return typeInfo; } |
Added Tests/Automated/Intellisense/ints_testing/ТаблицаЗначений.ints.
> > |
1 2 |
meth('ТаблицаЗначений', 'ВыбратьСтроку', 'СтрокаТаблицыЗначений', 'c'); prop('ТаблицаЗначений', 'Колонки', 'КоллекцияКолонокТаблицыЗначений', 'sce'); |
Added Tests/Automated/Intellisense/testIntsManager.js.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
$engine JScript $uname testIntsManager $dname Тесты для класса Intellisense.js::IntsManager $addin global $addin stdcommands $addin stdlib stdlib.require('jsUnitCore.js', SelfScript); var mainFolder = profileRoot.getValue("Snegopat/MainFolder"); var testDir = mainFolder + 'scripts\\Tests\\Automated\\Intellisense\\ints_testing'; var Ints = stdlib.require(mainFolder + 'scripts\\Intellisense.js'); function setUp() { } function tearDown() { } function macrosTest_addTypeInfoFromString() { var etalonTypeInfo = { n : 'ТаблицаЗначений', m : { 'выбратьстроку': { n: 'ВыбратьСтроку', r: 'СтрокаТаблицыЗначений', a: 'c'} }, p : { 'колонки' : { n: 'Колонки', t: 'КоллекцияКолонокТаблицыЗначений', a: 'sce'}} }; var intsCode = "meth('ТаблицаЗначений', 'ВыбратьСтроку', 'СтрокаТаблицыЗначений', 'c');\n" + "prop('ТаблицаЗначений', 'Колонки', 'КоллекцияКолонокТаблицыЗначений', 'sce');" var im = new Ints.IntsManager(); im.addTypeInfoFromString(intsCode); var ti = im.getTypeInfo('ТаблицаЗначений'); assertObjectEquals(etalonTypeInfo, ti); } function macrosTest_loadTypeInfoFromFile() { var etalonTypeInfo = { n : 'ТаблицаЗначений', m : { 'выбратьстроку': { n: 'ВыбратьСтроку', r: 'СтрокаТаблицыЗначений', a: 'c'} }, p : { 'колонки' : { n: 'Колонки', t: 'КоллекцияКолонокТаблицыЗначений', a: 'sce'}} }; var im = new Ints.IntsManager(testDir); im.loadTypeInfoFromFile('ТаблицаЗначений'); var ti = im.getTypeInfo('ТаблицаЗначений'); assertObjectEquals(etalonTypeInfo, ti); } |