From e830d76d98fd602782302489e5199be38a4e7cf5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 3 Feb 2018 12:24:29 +0100 Subject: [PATCH] doxygen: propagate function deletion status to the search. Also renamed the internal flags to be less annoyingly long. --- doxygen/dox2html5.py | 17 +++++++++-------- doxygen/search.js | 2 +- doxygen/test/js-test-data/searchdata.b85 | 2 +- doxygen/test/js-test-data/searchdata.bin | Bin 630 -> 630 bytes doxygen/test/populate-js-test-data.py | 4 ++-- doxygen/test/search/Dir/File.h | 2 +- doxygen/test/test-search.js | 6 +++--- doxygen/test/test_search.py | 10 ++++++---- 8 files changed, 23 insertions(+), 20 deletions(-) diff --git a/doxygen/dox2html5.py b/doxygen/dox2html5.py index 34dafc5e..5adbb1ee 100755 --- a/doxygen/dox2html5.py +++ b/doxygen/dox2html5.py @@ -131,7 +131,8 @@ class Trie: class ResultFlag(Flag): HAS_SUFFIX = 1 << 0 - IS_DEPRECATED = 1 << 1 + DEPRECATED = 1 << 1 + DELETED = 1 << 2 _TYPE = 0xf << 4 NAMESPACE = 1 << 4 @@ -1167,7 +1168,7 @@ def parse_enum(state: State, element: ET.Element): enum.has_value_details = True if not state.doxyfile['M_SEARCH_DISABLED']: result = Empty() - result.flags = ResultFlag.ENUM_VALUE|(ResultFlag.IS_DEPRECATED if value.is_deprecated else ResultFlag(0)) + result.flags = ResultFlag.ENUM_VALUE|(ResultFlag.DEPRECATED if value.is_deprecated else ResultFlag(0)) result.url = state.current_url + '#' + value.id result.prefix = state.current_prefix + [enum.name] result.name = value.name @@ -1178,7 +1179,7 @@ def parse_enum(state: State, element: ET.Element): if enum.brief or enum.has_details or enum.has_value_details: if not state.doxyfile['M_SEARCH_DISABLED']: result = Empty() - result.flags = ResultFlag.ENUM|(ResultFlag.IS_DEPRECATED if enum.is_deprecated else ResultFlag(0)) + result.flags = ResultFlag.ENUM|(ResultFlag.DEPRECATED if enum.is_deprecated else ResultFlag(0)) result.url = state.current_url + '#' + enum.id result.prefix = state.current_prefix result.name = enum.name @@ -1240,7 +1241,7 @@ def parse_typedef(state: State, element: ET.Element): typedef.has_details = typedef.description or typedef.has_template_details if typedef.brief or typedef.has_details: result = Empty() - result.flags = ResultFlag.TYPEDEF|(ResultFlag.IS_DEPRECATED if typedef.is_deprecated else ResultFlag(0)) + result.flags = ResultFlag.TYPEDEF|(ResultFlag.DEPRECATED if typedef.is_deprecated else ResultFlag(0)) result.url = state.current_url + '#' + typedef.id result.prefix = state.current_prefix result.name = typedef.name @@ -1343,7 +1344,7 @@ def parse_func(state: State, element: ET.Element): if func.brief or func.has_details: if not state.doxyfile['M_SEARCH_DISABLED']: result = Empty() - result.flags = ResultFlag.FUNC|(ResultFlag.IS_DEPRECATED if func.is_deprecated else ResultFlag(0)) + result.flags = ResultFlag.FUNC|(ResultFlag.DEPRECATED if func.is_deprecated else ResultFlag(0))|(ResultFlag.DELETED if func.is_deleted else ResultFlag(0)) result.url = state.current_url + '#' + func.id result.prefix = state.current_prefix result.name = func.name @@ -1375,7 +1376,7 @@ def parse_var(state: State, element: ET.Element): if var.brief or var.has_details: if not state.doxyfile['M_SEARCH_DISABLED']: result = Empty() - result.flags = ResultFlag.VAR|(ResultFlag.IS_DEPRECATED if var.is_deprecated else ResultFlag(0)) + result.flags = ResultFlag.VAR|(ResultFlag.DEPRECATED if var.is_deprecated else ResultFlag(0)) result.url = state.current_url + '#' + var.id result.prefix = state.current_prefix result.name = var.name @@ -1413,7 +1414,7 @@ def parse_define(state: State, element: ET.Element): if define.brief or define.has_details: if not state.doxyfile['M_SEARCH_DISABLED']: result = Empty() - result.flags = ResultFlag.DEFINE|(ResultFlag.IS_DEPRECATED if define.is_deprecated else ResultFlag(0)) + result.flags = ResultFlag.DEFINE|(ResultFlag.DEPRECATED if define.is_deprecated else ResultFlag(0)) result.url = state.current_url + '#' + define.id result.prefix = [] result.name = define.name @@ -1615,7 +1616,7 @@ def _build_search_data(state: State, prefix, id: str, trie: Trie, map: ResultMap # Otherwise add it multiple times with all possible prefixes else: # TODO: escape elsewhere so i don't have to unescape here - index = map.add(html.unescape(result_joiner.join(prefixed_name)), compound.url, flags=kind|(ResultFlag.IS_DEPRECATED if compound.is_deprecated else ResultFlag(0))) + index = map.add(html.unescape(result_joiner.join(prefixed_name)), compound.url, flags=kind|(ResultFlag.DEPRECATED if compound.is_deprecated else ResultFlag(0))) for i in range(len(prefixed_name)): lookahead_barriers = [] name = '' diff --git a/doxygen/search.js b/doxygen/search.js index 69aa469c..0bac7a51 100644 --- a/doxygen/search.js +++ b/doxygen/search.js @@ -391,7 +391,7 @@ var Search = { break; } - list += this.fromUtf8('
' + type + '
' + (results[i].flags & 2 ? '
deprecated
' : '') + '
' + this.escapeForRtl(results[i].name.substr(0, results[i].name.length - value.length - results[i].suffixLength)) + '' + this.escapeForRtl(results[i].name.substr(results[i].name.length - value.length - results[i].suffixLength, value.length)) + '' + this.escapeForRtl(results[i].name.substr(results[i].name.length - results[i].suffixLength)) + '
'); + list += this.fromUtf8('
' + type + '
' + (results[i].flags & 2 ? '
deprecated
' : '') + (results[i].flags & 4 ? '
deleted
' : '') + '
' + this.escapeForRtl(results[i].name.substr(0, results[i].name.length - value.length - results[i].suffixLength)) + '' + this.escapeForRtl(results[i].name.substr(results[i].name.length - value.length - results[i].suffixLength, value.length)) + '' + this.escapeForRtl(results[i].name.substr(results[i].name.length - results[i].suffixLength)) + '
'); } document.getElementById('search-results').innerHTML = list; document.getElementById('search-current').scrollIntoView(true); diff --git a/doxygen/test/js-test-data/searchdata.b85 b/doxygen/test/js-test-data/searchdata.b85 index 02983f9d..2d1c1614 100644 --- a/doxygen/test/js-test-data/searchdata.b85 +++ b/doxygen/test/js-test-data/searchdata.b85 @@ -1 +1 @@ -O+!-vL;(N*Dggih0s#R40{{d704W0i2mk;m0{{*H0B!>S6aWBe0s#X60{|cZ04W0iBme*?0{|)j0B!>SFaQ8)0{}Jv0Br*RJOBVX1OWm7LI8j|0{}<>0CEEWPyhgL0{~V40CWQYTmS%L0{~(G0A&IJ1pos8ZU6u&0|0UW04M_hcmM!y0|0&i0BHjNga80-0|1Hu06GK#1OSi#fI0&JmH+@{0|1@?0A~XLqyPYJ0|2T30AU9J8UO%oXaE3qumAvZ0|2%F06GK#006`QfI0&J$^Zap0|3$h0CWTc0RRI41pos8-T(k80|4d#04M_h>;M361pwFp0Aca~0BHgN1^@#90s#PJ0{{jA0A~XL3;_UP0{{{M0B{2U7y$rc0{|WY0Cfof_y7QHXaE3qumAvZBmn?(AOHXmHvj-(VgLXlhX4R!z5oCq;Q#<(76AajG64VpO<{Cs0B&JzWpi+0V`WWYbZ9PUbZu-1O<{CsIy!A>ZYXJPbSxlgZgeRCZeeX@b8ul}WldppXf9}UZEPcLX>LtnbZ9y{R%K&!Z*l-*Y+-YAO<{CsUol@XR%K&!Z*neZbZu+~O<{CsIyzQmV{~tFIy!A>ZYU`rV{dMAbO2*)VRLg$VRUF;F<&uOWn*-2axQ3eZEPcLX>LtnbZ9y{QekdqWdLJrVRLg$VRUF;F<&uKVQyz-E@*UZYz9qXbZ9y{QekdqWjZ=-X>KSfAY*TCb94Y>Y+-YAO<{CsUol@XQekdqWiDuRZEPcLX>L$qXJsJ5yC73_VsK$+WdL(^VsK$+WiDuRZEOGl \ No newline at end of file +O+!-vL;(N*Dggih0s#R40{{d704W0i2mk;m0{{*H0B!>S6aWBe0s#X60{|cZ04W0iBme*?0{|)j0B!>SFaQ8)0{}Jv0Br*RJOBVX1OWm7LI8j|0{}<>0CEEWPyhgL0{~V40CWQYTmS%L0{~(G0A&IJ1pos8ZU6u&0|0UW04M_hcmM!y0|0&i0BHjNga80-0|1Hu06GK#1OSi#fI0&JmH+@{0|1@?0A~XLqyPYJ0|2T30AU9J8UO%oXaE3qumAvZ0|2%F06GK#006`QfI0&J$^Zap0|3$h0CWTc0RRI41pos8-T(k80|4d#04M_h>;M361pwFp0Aca~0BHgN1^@#90s#PJ0{{jA0A~XL3;_UP0{{{M0B{2U7y$rc0{|WY0Cfof_y7QHXaE3qumAvZBmn?(AOHXmHvj-(VgLXlhX4R!z5oCq;Q#<-76AajG64VpO<{Cs0B&JzWpi+0V`WWYbZ9PUbZu-1O<{CsIy!A>ZYXJPbSxlgZgeRCZeeX@b8ul}WldppXf9}UZEPcLX>LtnbZ9y{R%K&!Z*l-*Y+-YAO<{CsUol@XR%K&!Z*neZbZu+~O<{CsIyzQmV{~tFIy!A>ZYU`rV{dMAbO2*)VRLg$VRUF;F<&uOWn*-2axQ3eZEPcLX>LtnbZ9y{QekdqWdLJrVRLg$VRUF;F<&uKVQyz-E@*UZYz9qXbZ9y{QekdqWjZ=-X>KSfAY*TCb94Y>Y+-YAO<{CsUol@XQekdqWiDuRZEPcLX>L$qXJsJ5yC73_VsK$+WdL(^VsK$+WiDuRZEOGl \ No newline at end of file diff --git a/doxygen/test/js-test-data/searchdata.bin b/doxygen/test/js-test-data/searchdata.bin index ff1d18795deb9df80ef8d28973c45a26aa392caf..12fe6ea17cdd32c9f0e4fd08ada7e5617a356704 100644 GIT binary patch delta 14 Vcmeyy@{MIfG$Ui`<`_mPMgS`j1d;#% delta 14 Vcmeyy@{MIfG$Ui;<`_mPMgS`L1dadz diff --git a/doxygen/test/populate-js-test-data.py b/doxygen/test/populate-js-test-data.py index 32bcfbaf..0d0eac68 100755 --- a/doxygen/test/populate-js-test-data.py +++ b/doxygen/test/populate-js-test-data.py @@ -50,7 +50,7 @@ trie.insert("math", map.add("Math", "namespaceMath.html", flags=ResultFlag.NAMES index = map.add("Math::min(int, int)", "namespaceMath.html#min", suffix_length=8, flags=ResultFlag.FUNC) trie.insert("math::min()", index, lookahead_barriers=[4]) trie.insert("min()", index) -index = map.add("Math::Vector", "classMath_1_1Vector.html", flags=ResultFlag.CLASS|ResultFlag.IS_DEPRECATED) +index = map.add("Math::Vector", "classMath_1_1Vector.html", flags=ResultFlag.CLASS|ResultFlag.DEPRECATED) trie.insert("math::vector", index) trie.insert("vector", index) index = map.add("Math::Vector::min() const", "classMath_1_1Vector.html#min", suffix_length=6, flags=ResultFlag.FUNC) @@ -60,7 +60,7 @@ trie.insert("min()", index) index = map.add("Math::Range", "classMath_1_1Range.html", flags=ResultFlag.CLASS) trie.insert("math::range", index) trie.insert("range", index) -index = map.add("Math::Range::min() const", "classMath_1_1Range.html#min", suffix_length=6, flags=ResultFlag.FUNC) +index = map.add("Math::Range::min() const", "classMath_1_1Range.html#min", suffix_length=6, flags=ResultFlag.FUNC|ResultFlag.DELETED) trie.insert("math::range::min()", index, lookahead_barriers=[4, 11]) trie.insert("range::min()", index, lookahead_barriers=[5]) trie.insert("min()", index) diff --git a/doxygen/test/search/Dir/File.h b/doxygen/test/search/Dir/File.h index 81b88345..74dee254 100644 --- a/doxygen/test/search/Dir/File.h +++ b/doxygen/test/search/Dir/File.h @@ -17,7 +17,7 @@ class Class { void foo() const; /**< @overload */ - void foo() &&; /**< @overload */ + void foo() && = delete; /**< @overload */ /** @brief Function with arguments */ void foo(const Enum& first, Typedef second); diff --git a/doxygen/test/test-search.js b/doxygen/test/test-search.js index 87d1434f..7c94f2df 100644 --- a/doxygen/test/test-search.js +++ b/doxygen/test/test-search.js @@ -125,7 +125,7 @@ const { StringDecoder } = require('string_decoder'); suffixLength: 10 }, { name: 'Math::Range::min() const', url: 'classMath_1_1Range.html#min', - flags: 97, + flags: 101, suffixLength: 10 }]; assert.deepEqual(Search.search('m'), resultsForM); @@ -141,7 +141,7 @@ const { StringDecoder } = require('string_decoder'); suffixLength: 8 }, { name: 'Math::Range::min() const', url: 'classMath_1_1Range.html#min', - flags: 97, + flags: 101, suffixLength: 8 }]); /* Go back, get the same thing */ @@ -209,7 +209,7 @@ const { StringDecoder } = require('string_decoder'); suffixLength: 8 }, { name: 'Math::Range::min() const', url: 'classMath_1_1Range.html#min', - flags: 97, + flags: 101, suffixLength: 8 }]); } diff --git a/doxygen/test/test_search.py b/doxygen/test/test_search.py index 304516e9..4c1a98dd 100755 --- a/doxygen/test/test_search.py +++ b/doxygen/test/test_search.py @@ -138,8 +138,10 @@ def pretty_print_map(serialized: bytes, colors=False): if i: out += '\n' flags = ResultFlag(ResultMap.flags_struct.unpack_from(serialized, i*4 + 3)[0]) extra = [] - if flags & ResultFlag.IS_DEPRECATED: + if flags & ResultFlag.DEPRECATED: extra += ['deprecated'] + if flags & ResultFlag.DELETED: + extra += ['deleted'] if flags & ResultFlag.HAS_SUFFIX: extra += ['suffix_length={}'.format(ResultMap.suffix_length_struct.unpack_from(serialized, offset)[0])] offset += 1 @@ -310,7 +312,7 @@ class MapSerialization(unittest.TestCase): self.assertEqual(map.add("Math::Vector", "classMath_1_1Vector.html", flags=ResultFlag.CLASS), 1) self.assertEqual(map.add("Math::Range", "classMath_1_1Range.html", flags=ResultFlag.CLASS), 2) self.assertEqual(map.add("Math::min()", "namespaceMath.html#abcdef2875", flags=ResultFlag.FUNC), 3) - self.assertEqual(map.add("Math::max(int, int)", "namespaceMath.html#abcdef2875", suffix_length=8, flags=ResultFlag.FUNC), 4) + self.assertEqual(map.add("Math::max(int, int)", "namespaceMath.html#abcdef2875", suffix_length=8, flags=ResultFlag.FUNC|ResultFlag.DEPRECATED|ResultFlag.DELETED), 4) serialized = map.serialize() self.compare(serialized, """ @@ -318,7 +320,7 @@ class MapSerialization(unittest.TestCase): 1: Math::Vector [type=CLASS] -> classMath_1_1Vector.html 2: Math::Range [type=CLASS] -> classMath_1_1Range.html 3: Math::min() [type=FUNC] -> namespaceMath.html#abcdef2875 -4: Math::max(int, int) [suffix_length=8, type=FUNC] -> namespaceMath.html#abcdef2875 +4: Math::max(int, int) [deprecated, deleted, suffix_length=8, type=FUNC] -> namespaceMath.html#abcdef2875 """) self.assertEqual(len(serialized), 210) @@ -446,7 +448,7 @@ macro [31] 14: DeprecatedDir/DeprecatedFile.h [deprecated, type=FILE] -> DeprecatedFile_8h.html 15: Namespace::Class::foo() [type=FUNC] -> classNamespace_1_1Class.html#aaeba4096356215868370d6ea476bf5d9 16: Namespace::Class::foo() const [suffix_length=6, type=FUNC] -> classNamespace_1_1Class.html#ac03c5b93907dda16763eabd26b25500a -17: Namespace::Class::foo() && [suffix_length=3, type=FUNC] -> classNamespace_1_1Class.html#ac9e7e80d06281e30cfcc13171d117ade +17: Namespace::Class::foo() && [deleted, suffix_length=3, type=FUNC] -> classNamespace_1_1Class.html#ac9e7e80d06281e30cfcc13171d117ade 18: Namespace::Class::foo(const Enum&, Typedef) [suffix_length=20, type=FUNC] -> classNamespace_1_1Class.html#aba8d57a830d4d79f86d58d92298677fa 19: DeprecatedNamespace::DeprecatedEnum::Value [type=ENUM_VALUE] -> namespaceDeprecatedNamespace.html#ab1e37ddc1d65765f2a48485df4af7b47a689202409e48743b914713f96d93947c 20: DeprecatedNamespace::DeprecatedEnum [deprecated, type=ENUM] -> namespaceDeprecatedNamespace.html#ab1e37ddc1d65765f2a48485df4af7b47 -- 2.30.2