diff --git a/elixir/api.py b/elixir/api.py index 57936f3..1574907 100755 --- a/elixir/api.py +++ b/elixir/api.py @@ -46,7 +46,7 @@ class ApiIdentGetterResource: if version == 'latest': version = query.get_latest_tag() - symbol_definitions, symbol_references, symbol_doccomments = query.search_ident(version, ident, family) + symbol_definitions, symbol_references, symbol_doccomments, _ = query.search_ident(version, ident, family) resp.status = falcon.HTTP_200 resp.content_type = falcon.MEDIA_JSON diff --git a/elixir/query.py b/elixir/query.py index 1e740bf..5de950a 100755 --- a/elixir/query.py +++ b/elixir/query.py @@ -212,7 +212,7 @@ class Query: ident = parse.quote(ident) if not self.dts_comp_support or not self.db.comps.exists(ident): - return symbol_c, symbol_dts, symbol_docs + return symbol_c, symbol_dts, symbol_docs, False files_this_version = self.db.vers.get(version).iter() comps = self.db.comps.get(ident).iter(dummy=True) @@ -253,7 +253,7 @@ class Query: for path, blines in sorted(compsBBuf): symbol_docs.append(SymbolInstance(path, blines)) - return symbol_c, symbol_dts, symbol_docs + return symbol_c, symbol_dts, symbol_docs, True def get_idents_defs(self, version, ident, family): @@ -262,10 +262,10 @@ class Query: symbol_doccomments = [] if not self.db.defs.exists(ident): - return symbol_definitions, symbol_references, symbol_doccomments + return symbol_definitions, symbol_references, symbol_doccomments, False if not self.db.vers.exists(version): - return symbol_definitions, symbol_references, symbol_doccomments + return symbol_definitions, symbol_references, symbol_doccomments, True files_this_version = self.db.vers.get(version).iter() this_ident = self.db.defs.get(ident) @@ -330,5 +330,5 @@ class Query: for path, docline in sorted(docBuf): symbol_doccomments.append(SymbolInstance(path, docline)) - return symbol_definitions, symbol_references, symbol_doccomments + return symbol_definitions, symbol_references, symbol_doccomments, True diff --git a/elixir/web.py b/elixir/web.py index edeef66..6eb2c28 100755 --- a/elixir/web.py +++ b/elixir/web.py @@ -695,7 +695,8 @@ def generate_ident_page(ctx: RequestContext, q: Query, status = falcon.HTTP_OK source_base_url = get_source_base_url(project, version) - symbol_definitions, symbol_references, symbol_doccomments = q.search_ident(version, ident, family) + symbol_definitions, symbol_references, symbol_doccomments, symbol_exists = q.search_ident( + version, ident, family) symbol_sections = [] if len(symbol_definitions) or len(symbol_references): @@ -734,9 +735,8 @@ def generate_ident_page(ctx: RequestContext, q: Query, 'message': 'No references found in the database', }) - else: - if ident != '': - status = falcon.HTTP_NOT_FOUND + elif ident != '': + status = falcon.HTTP_NOT_FOUND get_url_with_new_version = lambda v: stringify_ident_path(project, v, family, ident) @@ -747,6 +747,8 @@ def generate_ident_page(ctx: RequestContext, q: Query, 'current_family': family, 'symbol_sections': symbol_sections, + + 'symbol_exists': symbol_exists, } template = ctx.jinja_env.get_template('ident.html') diff --git a/templates/ident.html b/templates/ident.html index 91d5d4e..e0e5f2a 100644 --- a/templates/ident.html +++ b/templates/ident.html @@ -57,8 +57,13 @@ {% endif %} {% endfor %} {% else %} -

Identifier not used

-
Note: Autocomplete currently searches identifiers in all versions of the project.
+

Unknown identifier '{{ searched_ident|e }}'

+ {% if symbol_exists %} +
+ The '{{ searched_ident|e }}' symbol is defined in another version. + Elixir cannot efficiently tell where. +
+ {% endif %} {% endif %} diff --git a/utils/query.py b/utils/query.py index fbd35af..7afd38b 100644 --- a/utils/query.py +++ b/utils/query.py @@ -16,7 +16,7 @@ def cmd_versions(q, **kwargs): print(v) def cmd_ident(q, version, ident, family, **kwargs): - symbol_definitions, symbol_references, symbol_doccomments = q.search_ident(version, ident, family) + symbol_definitions, symbol_references, symbol_doccomments, _ = q.search_ident(version, ident, family) print("Symbol Definitions:") for symbol_definition in symbol_definitions: print(symbol_definition)