[Github-comments] [geany/geany] Sync ctags main part (#1263)
Colomban Wendling
notifications at xxxxx
Thu Nov 24 16:04:48 UTC 2016
b4n requested changes on this pull request.
Comments on the uctags/geany diff:
```diff
+static bool createTagsWithFallback1 (const langType language,
+ passStartCallback passCallback, void *userData)
+{
+ int lastPromise = getLastPromise ();
+ unsigned int passCount = 0;
+ rescanReason whyRescan;
+
+ if (LanguageTable [language]->useCork)
+ corkTagFile();
```
Doesn't this miss `initializeParser (language);`?
---
In `runParserInNarrowedInputStream()`: shouldn't more be guarded? Here the meat of the function is disabled with `CTAGS_LIB`, but not all.
---
```diff
-static void attachEndFieldMaybe (int macroCorkIndex)
-{
- if (macroCorkIndex != CORK_NIL)
- {
- tagEntryInfo *tag;
-
- tag = getEntryInCorkQueue (macroCorkIndex);
- tag->extensionFields.endLine = getInputLineNumber ();
- }
-}
-
```
Would be nice to have that :)
---
In `directiveDefine()`: Why use a completely different signature collection logic than CTags'? I get that might be related to c.c's handling of it, but not sure how what affects what.
> @@ -38,7 +38,14 @@ AC_PROG_LN_S
# autoscan start
# Checks for header files.
-AC_CHECK_HEADERS([fcntl.h fnmatch.h glob.h stdlib.h sys/time.h])
+AC_CHECK_HEADERS([fcntl.h glob.h stdlib.h sys/time.h errno.h limits.h])
+
+# Checks for dependencies needed by ctags
+AC_CHECK_HEADERS([fnmatch.h direct.h io.h sys/dir.h])
+AH_TEMPLATE([USE_STDBOOL_H], [whether or not to use <stdbool.h>.])
+AC_DEFINE([USE_STDBOOL_H])
+AH_TEMPLATE([CTAGS_LIB], [compile ctags as a library.])
+AC_DEFINE([CTAGS_LIB])
Should rather use the `AC_DEFINE(symbol, value, description)` than calling `AH_TEMPLATE` manually IMO:
```autoconf
AC_DEFINE([USE_STDBOOL_H], [1], [whether or not to use <stdbool.h>.])
AC_DEFINE([CTAGS_LIB], [1], [compile ctags as a library.])
```
>
while (1)
{
nl = nestingLevelsGetCurrent(nestingLevels);
- if (nl && nl->type >= kind)
+ e = getEntryOfNestingLevel (nl);
+ if ((nl && (e == NULL)) || (e && (e->kind - AsciidocKinds) >= kind))
why do that when `e == NULL`?
> {
- e.extensionFields.scopeKind = &(AsciidocKinds [nl->type]);
- e.extensionFields.scopeName = vStringValue (nl->name);
+ e.extensionFields.scopeKind = &(AsciidocKinds [parent->kind - AsciidocKinds]);
+ e.extensionFields.scopeName = parent->name;
isn't the whole scope part dealt with by Cork anyway?
> {
- e.extensionFields.scopeKind = &(AsciidocKinds [nl->type]);
- e.extensionFields.scopeName = vStringValue (nl->name);
+ e.extensionFields.scopeKind = &(AsciidocKinds [parent->kind - AsciidocKinds]);
seems like a convoluted way to say `parent->kind` :)
> @@ -290,12 +289,12 @@ static kindOption CKinds [] = {
{ true, 'g', "enum", "enumeration names"},
{ true, 'm', "member", "class, struct, and union members"},
{ true, 'n', "namespace", "namespaces"},
- { false, 'p', "prototype", "function prototypes"},
+ { true, 'p', "prototype", "function prototypes"},
that's odd… but I would have imagine those would have been enabled before. Weird.
> @@ -1221,11 +1219,10 @@ static void addOtherFields (tagEntryInfo* const tag, const tagType type,
{
tag->extensionFields.access = accessField (st);
}
- if ((true == st->gotArgs) && (true == Option.extensionFields.argList) &&
is that option gone? Not that we actually do need it, but well
>
contextual_fake_count = 0;
Assert (passCount < 3);
- cppInit ((bool) (passCount > 1), isInputLanguage (Lang_csharp), isInputLanguage (Lang_cpp), &(CKinds [CK_DEFINE]));
+
+ kind_for_define = CKinds+CK_DEFINE;
+
+ cppInit ((bool) (passCount > 1), isInputLanguage (Lang_csharp), isInputLanguage(Lang_cpp),
+ kind_for_define);
why introduce the `kind_for_define` variable?
>
exception = (exception_t) setjmp (Exception);
- retry = false;
shouldn't `rescan` be reset to `RESCAN_NONE` here? `setjmp()` might lead to jumping there directly.
> vStringCatS(result, ".");
else
vStringCatS(result, "/");
*/
}
- vStringCat(result, nl->name);
- is_class = (nl->type == K_CLASS);
+
+ e = getEntryOfNestingLevel (nl);
+ if (e)
+ {
+ vStringCatS(result, e->name);
+ is_class = ((e->kind - PythonKinds) == K_CLASS);
+ }
+ else
+ is_class = K_FUNCTION; /* ??? */
shouldn't that be merely `false`?
> prev = nl;
}
return is_class;
}
/* Check indentation level and truncate nesting levels accordingly */
-static void checkIndent(NestingLevels *nls, int indent)
+static void checkIndent(NestingLevels *nls, int indent, bool eof)
unused last (new) param
> @@ -27,6 +27,17 @@
/*
* DATA DEFINITIONS
*/
+
+struct corkPair {
+ int index;
+};
that struct looks useless.
> @@ -825,5 +859,6 @@ extern parserDefinition *PythonParser (void)
def->kindCount = ARRAY_SIZE (PythonKinds);
def->extensions = extensions;
def->parser = findPythonTags;
+ def->useCork = true;
return def;
}
well, I guess all changes to *python.c* are not too relevant so long as the parser still works, as I plan to import my new rewritten parser prom UCtags once Cork is available on our side.
>
while (1)
{
nl = nestingLevelsGetCurrent(nestingLevels);
- if (nl && nl->type >= kind)
+ e = getEntryOfNestingLevel (nl);
+ if ((nl && (e == NULL)) || (e && (e->kind - RestKinds) >= kind))
same question as why handling `e == NULL` on the left
> {
- e.extensionFields.scopeKind = &(RestKinds [nl->type]);
- e.extensionFields.scopeName = vStringValue (nl->name);
+ e.extensionFields.scopeKind = &(RestKinds [parent->kind - RestKinds]);
+ e.extensionFields.scopeName = parent->name;
again, same as for asciidoc
> - {
- GStatBuf s;
-
- /* load file to memory and parse it from memory unless the file is too big */
- if (g_stat(file_name, &s) != 0 || s.st_size > 10*1024*1024)
- parse_file = TRUE;
- else
- {
- if (!g_file_get_contents(file_name, (gchar**)&text_buf, (gsize*)&buf_size, NULL))
- {
- g_warning("Unable to open %s", file_name);
- return FALSE;
- }
- free_buf = TRUE;
- }
- }
shouldn't we keep this?
> @@ -1,4 +1,5 @@
# format=tagmanager
-ENTSEQNO�16�(seq)�0�FUNCSTS
-MEMTXT�16�(form_msg)�0�
-MEMTXT�1024�(form_msg)�0�
+ENTSEQNO�16�(eq)�0�FUNCSTS
should really be `(seq)` if anything
> @@ -1,4 +1,5 @@
# format=tagmanager
-ENTSEQNO�16�(seq)�0�FUNCSTS
-MEMTXT�16�(form_msg)�0�
-MEMTXT�1024�(form_msg)�0�
+ENTSEQNO�16�(eq)�0�FUNCSTS
+MEMTXT�16�(mail)�0�
+MEMTXT�1024�(orm_msg)�0�FUNCSTS
here too, should be `(from_msg)`
> @@ -20,5 +20,5 @@ obj
qar�64�Struct.Union�0�int
quxx�64�Struct.Union�0�bool
test.simple�256�0
-tfun�16�(T)�Class�0�auto
+tfun�16�(T v)�Class�0�auto
not sure if it's better or worse. Source line is
```d
auto tfun(T)(T v)
{
return v;
}
```
> @@ -114,6 +150,14 @@ extern const char *tagFileName (void)
* Pseudo tag support
*/
+extern void abort_if_ferror(MIO *const mio)
+{
+#ifndef CTAGS_LIB
+ if (mio_error (mio))
+ error (FATAL | PERROR, "cannot write tag file");
+#endif
It maybe worth still doing *something*? warn maybe?
> + if (includeExtensionFlags ()
+ && isXtagEnabled (XTAG_QUALIFIED_TAGS)
+ && doesInputLanguageRequestAutomaticFQTag ())
+ buildFqTagCache (tag);
+
+#ifdef CTAGS_LIB
+ getTagScopeInformation((tagEntryInfo *)tag, NULL, NULL);
+
+ if (TagEntryFunction != NULL)
+ {
+ ctagsTag t;
+
+ initCtagsTag(&t, tag);
+ length = TagEntryFunction(&t, TagEntryUserData);
+ }
+#else
Couldn't we simply have our own writer? Might be more work, but maybe less divergence?
> return NULL;
+
+ start = strdup (vStringValue (signature));
not standard, maybe use `eStrdup()`?
> extern bool isExcludedFile (const char* const name);
+extern bool isIncludeFile (const char *const fileName);
+/* GEANY DIFF */
+/* extern const ignoredTokenInfo * isIgnoreToken (const char *const name); */
extern bool isIgnoreToken (const char *const name, bool *const pIgnoreParens, const char **const replacement);
why not use the new ctags impl? I mean, it seems to do the same, but differently, couldn't we use that?
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/geany/geany/pull/1263#pullrequestreview-10056080
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.geany.org/pipermail/github-comments/attachments/20161124/40792eca/attachment.html>
More information about the Github-comments
mailing list