diff options
Diffstat (limited to 'clang/test')
57 files changed, 6050 insertions, 1760 deletions
diff --git a/clang/test/ExtractAPI/anonymous_record_no_typedef.c b/clang/test/ExtractAPI/anonymous_record_no_typedef.c index 049e8b1..0e50f4a 100644 --- a/clang/test/ExtractAPI/anonymous_record_no_typedef.c +++ b/clang/test/ExtractAPI/anonymous_record_no_typedef.c @@ -1,9 +1,8 @@ -// XFAIL: * // RUN: rm -rf %t // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/availability.c b/clang/test/ExtractAPI/availability.c index 12ac73f..3c1ef5c 100644 --- a/clang/test/ExtractAPI/availability.c +++ b/clang/test/ExtractAPI/availability.c @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf --product-name=Availability -triple arm64-apple-macosx -x c-header %t/input.h -o %t/output.json -verify +// RUN: %clang_cc1 -extract-api --product-name=Availability -triple arm64-apple-macosx -x c-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ diff --git a/clang/test/ExtractAPI/bool.c b/clang/test/ExtractAPI/bool.c index efab6df..f4082ed 100644 --- a/clang/test/ExtractAPI/bool.c +++ b/clang/test/ExtractAPI/bool.c @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang -extract-api --pretty-sgf -target arm64-apple-macosx \ +// RUN: %clang -extract-api -target arm64-apple-macosx \ // RUN: %t/input.h -o %t/output.json // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/bool.cpp b/clang/test/ExtractAPI/bool.cpp index f7d10c6..1b445e2 100644 --- a/clang/test/ExtractAPI/bool.cpp +++ b/clang/test/ExtractAPI/bool.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/class.cpp b/clang/test/ExtractAPI/class.cpp index 0c5db8e..21cac43 100644 --- a/clang/test/ExtractAPI/class.cpp +++ b/clang/test/ExtractAPI/class.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/class_template.cpp b/clang/test/ExtractAPI/class_template.cpp index 4f2670d..b04dca6 100644 --- a/clang/test/ExtractAPI/class_template.cpp +++ b/clang/test/ExtractAPI/class_template.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/class_template_param_inheritance.cpp b/clang/test/ExtractAPI/class_template_param_inheritance.cpp index 3d7b09f..0d38fd1 100644 --- a/clang/test/ExtractAPI/class_template_param_inheritance.cpp +++ b/clang/test/ExtractAPI/class_template_param_inheritance.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/class_template_partial_spec.cpp b/clang/test/ExtractAPI/class_template_partial_spec.cpp index c8d9cc7..eba0693 100644 --- a/clang/test/ExtractAPI/class_template_partial_spec.cpp +++ b/clang/test/ExtractAPI/class_template_partial_spec.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. @@ -15,7 +15,7 @@ template<typename X, typename Y> class Foo {}; template<typename Z> class Foo<Z, int> {}; -// expected-no-diagnostics +/// expected-no-diagnostics //--- reference.output.json.in { diff --git a/clang/test/ExtractAPI/class_template_spec.cpp b/clang/test/ExtractAPI/class_template_spec.cpp index 06a9531..4b183cb 100644 --- a/clang/test/ExtractAPI/class_template_spec.cpp +++ b/clang/test/ExtractAPI/class_template_spec.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/concept.cpp b/clang/test/ExtractAPI/concept.cpp index 443eac2..ff4e710 100644 --- a/clang/test/ExtractAPI/concept.cpp +++ b/clang/test/ExtractAPI/concept.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -std=c++20 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -std=c++20 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/constructor_destructor.cpp b/clang/test/ExtractAPI/constructor_destructor.cpp index 27112c9..9742d4b 100644 --- a/clang/test/ExtractAPI/constructor_destructor.cpp +++ b/clang/test/ExtractAPI/constructor_destructor.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. @@ -137,7 +137,7 @@ class Foo { "precise": "c:@S@Foo@F@Foo#" }, "kind": { - "displayName": "Constructor", + "displayName": "Instance Method", "identifier": "c++.method" }, "location": { @@ -193,7 +193,7 @@ class Foo { "precise": "c:@S@Foo@F@~Foo#" }, "kind": { - "displayName": "Destructor", + "displayName": "Instance Method", "identifier": "c++.method" }, "location": { diff --git a/clang/test/ExtractAPI/conversions.cpp b/clang/test/ExtractAPI/conversions.cpp index 07688ff..fc8d067 100644 --- a/clang/test/ExtractAPI/conversions.cpp +++ b/clang/test/ExtractAPI/conversions.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/emit-symbol-graph/multi_file.c b/clang/test/ExtractAPI/emit-symbol-graph/multi_file.c index e668f69..e6b72d5 100644 --- a/clang/test/ExtractAPI/emit-symbol-graph/multi_file.c +++ b/clang/test/ExtractAPI/emit-symbol-graph/multi_file.c @@ -5,19 +5,18 @@ // RUN: %t/reference.main.json.in >> %t/reference.main.json // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.test.json.in >> %t/reference.test.json -// RUN: %clang_cc1 %t/test.c %t/main.c -emit-symbol-graph --pretty-sgf \ -// RUN: --symbol-graph-dir=%t/SymbolGraphs --product-name=multifile_test -triple=x86_64-apple-macosx12.0.0 +// RUN: %clang_cc1 %t/test.c %t/main.c --emit-symbol-graph=%t/SymbolGraphs --product-name=multifile_test -triple=x86_64-apple-macosx12.0.0 // Test main.json // Generator version is not consistent across test runs, normalize it. // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ -// RUN: %t/SymbolGraphs/main.c.symbols.json > %t/output-normalized.json +// RUN: %t/SymbolGraphs/main.json > %t/output-normalized.json // RUN: diff %t/reference.main.json %t/output-normalized.json // Test test.json // Generator version is not consistent across test runs, normalize it. // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ -// RUN: %t/SymbolGraphs/test.c.symbols.json > %t/output-normalized.json +// RUN: %t/SymbolGraphs/test.json > %t/output-normalized.json // RUN: diff %t/reference.test.json %t/output-normalized.json // CHECK-NOT: error: diff --git a/clang/test/ExtractAPI/emit-symbol-graph/single_file.c b/clang/test/ExtractAPI/emit-symbol-graph/single_file.c index b00b5f5..8599e82 100644 --- a/clang/test/ExtractAPI/emit-symbol-graph/single_file.c +++ b/clang/test/ExtractAPI/emit-symbol-graph/single_file.c @@ -3,12 +3,11 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 %t/main.c -emit-symbol-graph --pretty-sgf \ -// RUN: --symbol-graph-dir=%t/SymbolGraphs --product-name=basicfile -triple=x86_64-apple-macosx12.0.0 +// RUN: %clang_cc1 %t/main.c --emit-symbol-graph=%t/SymbolGraphs --product-name=basicfile -triple=x86_64-apple-macosx12.0.0 // Generator version is not consistent across test runs, normalize it. // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ -// RUN: %t/SymbolGraphs/main.c.symbols.json >> %t/output-normalized.json +// RUN: %t/SymbolGraphs/main.json >> %t/output-normalized.json // RUN: diff %t/reference.output.json %t/output-normalized.json // CHECK-NOT: error: diff --git a/clang/test/ExtractAPI/enum.c b/clang/test/ExtractAPI/enum.c index 1cdf45c..94499d9 100644 --- a/clang/test/ExtractAPI/enum.c +++ b/clang/test/ExtractAPI/enum.c @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/field_template.cpp b/clang/test/ExtractAPI/field_template.cpp index 2058ed0..f05e826 100644 --- a/clang/test/ExtractAPI/field_template.cpp +++ b/clang/test/ExtractAPI/field_template.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/function_noexcepts.cpp b/clang/test/ExtractAPI/function_noexcepts.cpp index d95eaaa..3fc7263 100644 --- a/clang/test/ExtractAPI/function_noexcepts.cpp +++ b/clang/test/ExtractAPI/function_noexcepts.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/global_func_template.cpp b/clang/test/ExtractAPI/global_func_template.cpp index f43a618..8def974 100644 --- a/clang/test/ExtractAPI/global_func_template.cpp +++ b/clang/test/ExtractAPI/global_func_template.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/global_func_template_spec.cpp b/clang/test/ExtractAPI/global_func_template_spec.cpp index fe046e9..a24263d 100644 --- a/clang/test/ExtractAPI/global_func_template_spec.cpp +++ b/clang/test/ExtractAPI/global_func_template_spec.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/global_record.c b/clang/test/ExtractAPI/global_record.c index a08d51d..623032b 100644 --- a/clang/test/ExtractAPI/global_record.c +++ b/clang/test/ExtractAPI/global_record.c @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang -extract-api --pretty-sgf --product-name=GlobalRecord -target arm64-apple-macosx \ +// RUN: %clang -extract-api --product-name=GlobalRecord -target arm64-apple-macosx \ // RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/global_record_multifile.c b/clang/test/ExtractAPI/global_record_multifile.c index ffdfbcb..f9d3889 100644 --- a/clang/test/ExtractAPI/global_record_multifile.c +++ b/clang/test/ExtractAPI/global_record_multifile.c @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang -extract-api --pretty-sgf --product-name=GlobalRecord -target arm64-apple-macosx \ +// RUN: %clang -extract-api --product-name=GlobalRecord -target arm64-apple-macosx \ // RUN: %t/input1.h %t/input2.h %t/input3.h -o %t/output.json | FileCheck -allow-empty %s // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/global_var_template.cpp b/clang/test/ExtractAPI/global_var_template.cpp index 94f3713..bee2ea6 100644 --- a/clang/test/ExtractAPI/global_var_template.cpp +++ b/clang/test/ExtractAPI/global_var_template.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/global_var_template_partial_spec.cpp b/clang/test/ExtractAPI/global_var_template_partial_spec.cpp index 91084f25..e98076c 100644 --- a/clang/test/ExtractAPI/global_var_template_partial_spec.cpp +++ b/clang/test/ExtractAPI/global_var_template_partial_spec.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/global_var_template_spec.cpp b/clang/test/ExtractAPI/global_var_template_spec.cpp index ff4d8d1..cca2ab3 100644 --- a/clang/test/ExtractAPI/global_var_template_spec.cpp +++ b/clang/test/ExtractAPI/global_var_template_spec.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/known_files_only.c b/clang/test/ExtractAPI/known_files_only.c index de1e786..68881aa 100644 --- a/clang/test/ExtractAPI/known_files_only.c +++ b/clang/test/ExtractAPI/known_files_only.c @@ -1,7 +1,17 @@ // RUN: rm -rf %t // RUN: split-file %s %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --product-name=GlobalRecord -triple arm64-apple-macosx \ -// RUN: %t/input1.h -verify -o - | FileCheck %s +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang -extract-api --product-name=GlobalRecord -target arm64-apple-macosx \ +// RUN: %t/input1.h -o %t/output.json | FileCheck -allow-empty %s + +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +// CHECK-NOT: error: +// CHECK-NOT: warning: //--- input1.h int num; @@ -14,6 +24,87 @@ char not_emitted; void foo(int); struct Foo { int a; }; -// CHECK-NOT: input2.h - -// expected-no-diagnostics +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "GlobalRecord", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "num" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@num" + }, + "kind": { + "displayName": "Global Variable", + "identifier": "c.var" + }, + "location": { + "position": { + "character": 4, + "line": 0 + }, + "uri": "file://INPUT_DIR/input1.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "num" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "num" + } + ], + "title": "num" + }, + "pathComponents": [ + "num" + ] + } + ] +} diff --git a/clang/test/ExtractAPI/language.c b/clang/test/ExtractAPI/language.c index 90832fd..fe98626 100644 --- a/clang/test/ExtractAPI/language.c +++ b/clang/test/ExtractAPI/language.c @@ -7,11 +7,11 @@ // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/objcpp.reference.output.json.in >> %t/objcpp.reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -x c-header -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -x c-header -triple arm64-apple-macosx \ // RUN: %t/c.h -o %t/c.output.json | FileCheck -allow-empty %s -// RUN: %clang_cc1 -extract-api --pretty-sgf -x objective-c-header -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -x objective-c-header -triple arm64-apple-macosx \ // RUN: %t/objc.h -o %t/objc.output.json | FileCheck -allow-empty %s -// RUN: %clang_cc1 -extract-api --pretty-sgf -x objective-c++-header -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -x objective-c++-header -triple arm64-apple-macosx \ // RUN: %t/objcpp.h -o %t/objcpp.output.json | FileCheck -allow-empty %s // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/macro_undefined.c b/clang/test/ExtractAPI/macro_undefined.c index ec60f95..1a4ed20 100644 --- a/clang/test/ExtractAPI/macro_undefined.c +++ b/clang/test/ExtractAPI/macro_undefined.c @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang -extract-api --pretty-sgf --product-name=Macros -target arm64-apple-macosx \ +// RUN: %clang -extract-api --product-name=Macros -target arm64-apple-macosx \ // RUN: -x objective-c-header %t/input.h -o %t/output.json | FileCheck -allow-empty %s // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/macros.c b/clang/test/ExtractAPI/macros.c index 10003fe..d5807f6 100644 --- a/clang/test/ExtractAPI/macros.c +++ b/clang/test/ExtractAPI/macros.c @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang -extract-api --pretty-sgf --product-name=Macros -target arm64-apple-macosx \ +// RUN: %clang -extract-api --product-name=Macros -target arm64-apple-macosx \ // RUN: -x objective-c-header %t/input.h -o %t/output.json | FileCheck -allow-empty %s // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/metadata_and_module.c b/clang/test/ExtractAPI/metadata_and_module.c deleted file mode 100644 index 79574a2..0000000 --- a/clang/test/ExtractAPI/metadata_and_module.c +++ /dev/null @@ -1,32 +0,0 @@ -// RUN: rm -rf %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --product-name=module -triple arm64-apple-macosx -x c-header %s -o %t/module.symbols.json -verify - -// RUN: FileCheck %s --input-file %t/module.symbols.json --check-prefix METADATA -// RUN: FileCheck %s --input-file %t/module.symbols.json --check-prefix MOD - -// expected-no-diagnostics - -// METADATA: "metadata": { -// METADATA-NEXT: "formatVersion": { -// METADATA-NEXT: "major": -// METADATA-NEXT: "minor": -// METADATA-NEXT: "patch": -// METADATA-NEXT: }, -// METADATA-NEXT: "generator": -// METADATA-NEXT: } - -// MOD: "module": { -// MOD-NEXT: "name": "module", -// MOD-NEXT: "platform": { -// MOD-NEXT: "architecture": "arm64", -// MOD-NEXT: "operatingSystem": { -// MOD-NEXT: "minimumVersion": { -// MOD-NEXT: "major": -// MOD-NEXT: "minor": -// MOD-NEXT: "patch": -// MOD-NEXT: }, -// MOD-NEXT: "name": "macosx" -// MOD-NEXT: }, -// MOD-NEXT: "vendor": "apple" -// MOD-NEXT: } -// MOD-NEXT: } diff --git a/clang/test/ExtractAPI/method_template.cpp b/clang/test/ExtractAPI/method_template.cpp index 714f9ca..8d83233 100644 --- a/clang/test/ExtractAPI/method_template.cpp +++ b/clang/test/ExtractAPI/method_template.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/method_template_spec.cpp b/clang/test/ExtractAPI/method_template_spec.cpp index 8eaffde..706d99d 100644 --- a/clang/test/ExtractAPI/method_template_spec.cpp +++ b/clang/test/ExtractAPI/method_template_spec.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/methods.cpp b/clang/test/ExtractAPI/methods.cpp index 412c0bb..8b024a8 100644 --- a/clang/test/ExtractAPI/methods.cpp +++ b/clang/test/ExtractAPI/methods.cpp @@ -1,221 +1,467 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ -// RUN: -triple arm64-apple-macosx -x c++-header %s -o %t/output.symbols.json -verify +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ +// RUN: -x c++-header %t/input.h -o %t/output.json -verify +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +//--- input.h class Foo { - // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GETCOUNT int getCount(); - // GETCOUNT: "!testRelLabel": "memberOf $ c:@S@Foo@F@getCount# $ c:@S@Foo" - // GETCOUNT-LABEL: "!testLabel": "c:@S@Foo@F@getCount#" - // GETCOUNT: "accessLevel": "private", - // GETCOUNT: "declarationFragments": [ - // GETCOUNT-NEXT: { - // GETCOUNT-NEXT: "kind": "typeIdentifier", - // GETCOUNT-NEXT: "preciseIdentifier": "c:I", - // GETCOUNT-NEXT: "spelling": "int" - // GETCOUNT-NEXT: }, - // GETCOUNT-NEXT: { - // GETCOUNT-NEXT: "kind": "text", - // GETCOUNT-NEXT: "spelling": " " - // GETCOUNT-NEXT: }, - // GETCOUNT-NEXT: { - // GETCOUNT-NEXT: "kind": "identifier", - // GETCOUNT-NEXT: "spelling": "getCount" - // GETCOUNT-NEXT: }, - // GETCOUNT-NEXT: { - // GETCOUNT-NEXT: "kind": "text", - // GETCOUNT-NEXT: "spelling": "();" - // GETCOUNT-NEXT: } - // GETCOUNT-NEXT: ], - // GETCOUNT: "functionSignature": { - // GETCOUNT-NEXT: "returns": [ - // GETCOUNT-NEXT: { - // GETCOUNT-NEXT: "kind": "typeIdentifier", - // GETCOUNT-NEXT: "preciseIdentifier": "c:I", - // GETCOUNT-NEXT: "spelling": "int" - // GETCOUNT-NEXT: } - // GETCOUNT-NEXT: ] - // GETCOUNT-NEXT: }, - // GETCOUNT: "displayName": "Instance Method", - // GETCOUNT-NEXT: "identifier": "c++.method" - // GETCOUNT: "title": "getCount" - // GETCOUNT: "pathComponents": [ - // GETCOUNT-NEXT: "Foo", - // GETCOUNT-NEXT: "getCount" - // GETCOUNT-NEXT: ] - // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SETL void setLength(int length) noexcept; - // SETL: "!testRelLabel": "memberOf $ c:@S@Foo@F@setLength#I# $ c:@S@Foo" - // SETL-LABEL: "!testLabel": "c:@S@Foo@F@setLength#I#" - // SETL: "declarationFragments": [ - // SETL-NEXT: { - // SETL-NEXT: "kind": "typeIdentifier", - // SETL-NEXT: "preciseIdentifier": "c:v", - // SETL-NEXT: "spelling": "void" - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "text", - // SETL-NEXT: "spelling": " " - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "identifier", - // SETL-NEXT: "spelling": "setLength" - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "text", - // SETL-NEXT: "spelling": "(" - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "typeIdentifier", - // SETL-NEXT: "preciseIdentifier": "c:I", - // SETL-NEXT: "spelling": "int" - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "text", - // SETL-NEXT: "spelling": " " - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "internalParam", - // SETL-NEXT: "spelling": "length" - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "text", - // SETL-NEXT: "spelling": ")" - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "text", - // SETL-NEXT: "spelling": " " - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "keyword", - // SETL-NEXT: "spelling": "noexcept" - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "text", - // SETL-NEXT: "spelling": ";" - // SETL-NEXT: } - // SETL-NEXT: ], - // SETL: "functionSignature": { - // SETL-NEXT: "parameters": [ - // SETL-NEXT: { - // SETL-NEXT: "declarationFragments": [ - // SETL-NEXT: { - // SETL-NEXT: "kind": "typeIdentifier", - // SETL-NEXT: "preciseIdentifier": "c:I", - // SETL-NEXT: "spelling": "int" - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "text", - // SETL-NEXT: "spelling": " " - // SETL-NEXT: }, - // SETL-NEXT: { - // SETL-NEXT: "kind": "internalParam", - // SETL-NEXT: "spelling": "length" - // SETL-NEXT: } - // SETL-NEXT: ], - // SETL-NEXT: "name": "length" - // SETL-NEXT: } - // SETL-NEXT: ], - // SETL-NEXT: "returns": [ - // SETL-NEXT: { - // SETL-NEXT: "kind": "typeIdentifier", - // SETL-NEXT: "preciseIdentifier": "c:v", - // SETL-NEXT: "spelling": "void" - // SETL-NEXT: } - // SETL-NEXT: ] - // SETL-NEXT: }, public: - // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GETFOO static double getFoo(); - // GETFOO: "!testRelLabel": "memberOf $ c:@S@Foo@F@getFoo#S $ c:@S@Foo" - - // GETFOO-LABEL: "!testLabel": "c:@S@Foo@F@getFoo#S" - // GETFOO: "accessLevel": "public", - // GETFOO: "declarationFragments": [ - // GETFOO-NEXT: { - // GETFOO-NEXT: "kind": "keyword", - // GETFOO-NEXT: "spelling": "static" - // GETFOO-NEXT: }, - // GETFOO-NEXT: { - // GETFOO-NEXT: "kind": "text", - // GETFOO-NEXT: "spelling": " " - // GETFOO-NEXT: }, - // GETFOO-NEXT: { - // GETFOO-NEXT: "kind": "typeIdentifier", - // GETFOO-NEXT: "preciseIdentifier": "c:d", - // GETFOO-NEXT: "spelling": "double" - // GETFOO-NEXT: }, - // GETFOO-NEXT: { - // GETFOO-NEXT: "kind": "text", - // GETFOO-NEXT: "spelling": " " - // GETFOO-NEXT: }, - // GETFOO-NEXT: { - // GETFOO-NEXT: "kind": "identifier", - // GETFOO-NEXT: "spelling": "getFoo" - // GETFOO-NEXT: }, - // GETFOO-NEXT: { - // GETFOO-NEXT: "kind": "text", - // GETFOO-NEXT: "spelling": "();" - // GETFOO-NEXT: } - // GETFOO-NEXT: ], - // GETFOO: "functionSignature": { - // GETFOO-NEXT: "returns": [ - // GETFOO-NEXT: { - // GETFOO-NEXT: "kind": "typeIdentifier", - // GETFOO-NEXT: "preciseIdentifier": "c:d", - // GETFOO-NEXT: "spelling": "double" - // GETFOO-NEXT: } - // GETFOO-NEXT: ] - // GETFOO-NEXT: }, - // GETFOO: "kind": { - // GETFOO-NEXT: "displayName": "Static Method", - // GETFOO-NEXT: "identifier": "c++.type.method" - // GETFOO-NEXT: }, protected: - // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GETBAR constexpr int getBar() const; - // GETBAR: "!testRelLabel": "memberOf $ c:@S@Foo@F@getBar#1 $ c:@S@Foo" - - // GETBAR-LABEL: "!testLabel": "c:@S@Foo@F@getBar#1" - // GETBAR: "accessLevel": "protected" - // GETBAR: "declarationFragments": [ - // GETBAR-NEXT: { - // GETBAR-NEXT: "kind": "keyword", - // GETBAR-NEXT: "spelling": "constexpr" - // GETBAR-NEXT: }, - // GETBAR-NEXT: { - // GETBAR-NEXT: "kind": "text", - // GETBAR-NEXT: "spelling": " " - // GETBAR-NEXT: }, - // GETBAR-NEXT: { - // GETBAR-NEXT: "kind": "typeIdentifier", - // GETBAR-NEXT: "preciseIdentifier": "c:I", - // GETBAR-NEXT: "spelling": "int" - // GETBAR-NEXT: }, - // GETBAR-NEXT: { - // GETBAR-NEXT: "kind": "text", - // GETBAR-NEXT: "spelling": " " - // GETBAR-NEXT: }, - // GETBAR-NEXT: { - // GETBAR-NEXT: "kind": "identifier", - // GETBAR-NEXT: "spelling": "getBar" - // GETBAR-NEXT: }, - // GETBAR-NEXT: { - // GETBAR-NEXT: "kind": "text", - // GETBAR-NEXT: "spelling": "() " - // GETBAR-NEXT: }, - // GETBAR-NEXT: { - // GETBAR-NEXT: "kind": "keyword", - // GETBAR-NEXT: "spelling": "const" - // GETBAR-NEXT: }, - // GETBAR-NEXT: { - // GETBAR-NEXT: "kind": "text", - // GETBAR-NEXT: "spelling": ";" - // GETBAR-NEXT: } - // GETBAR-NEXT: ], }; +/// expected-no-diagnostics -// expected-no-diagnostics +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:@S@Foo@F@getCount#", + "target": "c:@S@Foo", + "targetFallback": "Foo" + }, + { + "kind": "memberOf", + "source": "c:@S@Foo@F@setLength#I#", + "target": "c:@S@Foo", + "targetFallback": "Foo" + }, + { + "kind": "memberOf", + "source": "c:@S@Foo@F@getBar#1", + "target": "c:@S@Foo", + "targetFallback": "Foo" + }, + { + "kind": "memberOf", + "source": "c:@S@Foo@F@getFoo#S", + "target": "c:@S@Foo", + "targetFallback": "Foo" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "class" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Foo" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c++", + "precise": "c:@S@Foo" + }, + "kind": { + "displayName": "Class", + "identifier": "c++.class" + }, + "location": { + "position": { + "character": 6, + "line": 0 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "title": "Foo" + }, + "pathComponents": [ + "Foo" + ] + }, + { + "accessLevel": "private", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "getCount" + }, + { + "kind": "text", + "spelling": "();" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + } + ] + }, + "identifier": { + "interfaceLanguage": "c++", + "precise": "c:@S@Foo@F@getCount#" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "c++.method" + }, + "location": { + "position": { + "character": 6, + "line": 1 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "getCount" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "getCount" + } + ], + "title": "getCount" + }, + "pathComponents": [ + "Foo", + "getCount" + ] + }, + { + "accessLevel": "private", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "setLength" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "length" + }, + { + "kind": "text", + "spelling": ")" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "keyword", + "spelling": "noexcept" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "length" + } + ], + "name": "length" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "c++", + "precise": "c:@S@Foo@F@setLength#I#" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "c++.method" + }, + "location": { + "position": { + "character": 7, + "line": 3 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "setLength" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "setLength" + } + ], + "title": "setLength" + }, + "pathComponents": [ + "Foo", + "setLength" + ] + }, + { + "accessLevel": "protected", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "constexpr" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "getBar" + }, + { + "kind": "text", + "spelling": "() " + }, + { + "kind": "keyword", + "spelling": "const" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + } + ] + }, + "identifier": { + "interfaceLanguage": "c++", + "precise": "c:@S@Foo@F@getBar#1" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "c++.method" + }, + "location": { + "position": { + "character": 16, + "line": 9 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "getBar" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "getBar" + } + ], + "title": "getBar" + }, + "pathComponents": [ + "Foo", + "getBar" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "static" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:d", + "spelling": "double" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "getFoo" + }, + { + "kind": "text", + "spelling": "();" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:d", + "spelling": "double" + } + ] + }, + "identifier": { + "interfaceLanguage": "c++", + "precise": "c:@S@Foo@F@getFoo#S" + }, + "kind": { + "displayName": "Static Method", + "identifier": "c++.type.method" + }, + "location": { + "position": { + "character": 16, + "line": 6 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "getFoo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "getFoo" + } + ], + "title": "getFoo" + }, + "pathComponents": [ + "Foo", + "getFoo" + ] + } + ] +} diff --git a/clang/test/ExtractAPI/multiple_inheritance.cpp b/clang/test/ExtractAPI/multiple_inheritance.cpp index 7d49cf4..a1f069b 100644 --- a/clang/test/ExtractAPI/multiple_inheritance.cpp +++ b/clang/test/ExtractAPI/multiple_inheritance.cpp @@ -3,7 +3,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/namespace.cpp b/clang/test/ExtractAPI/namespace.cpp index 73e0728..e0c36dd 100644 --- a/clang/test/ExtractAPI/namespace.cpp +++ b/clang/test/ExtractAPI/namespace.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -std=c++20 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/nested_namespaces.cpp b/clang/test/ExtractAPI/nested_namespaces.cpp index c6912cf..bd13ef9 100644 --- a/clang/test/ExtractAPI/nested_namespaces.cpp +++ b/clang/test/ExtractAPI/nested_namespaces.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -std=c++20 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/objc_block.m b/clang/test/ExtractAPI/objc_block.m index 4a4335e..a7a4f56 100644 --- a/clang/test/ExtractAPI/objc_block.m +++ b/clang/test/ExtractAPI/objc_block.m @@ -1,630 +1,965 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ -// RUN: -fblocks -triple arm64-apple-macosx -x objective-c-header %s -o %t/output.symbols.json -verify +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang_cc1 -extract-api -fblocks -triple arm64-apple-macosx \ +// RUN: -x objective-c-header %t/input.h -o %t/output.json -verify +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +//--- input.h @interface Foo -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix NOPARAM -(void)methodBlockNoParam:(void (^)())block; -// NOPARAM-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockNoParam:" -// NOPARAM: "declarationFragments": [ -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "text", -// NOPARAM-NEXT: "spelling": "- (" -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "typeIdentifier", -// NOPARAM-NEXT: "preciseIdentifier": "c:v", -// NOPARAM-NEXT: "spelling": "void" -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "text", -// NOPARAM-NEXT: "spelling": ") " -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "identifier", -// NOPARAM-NEXT: "spelling": "methodBlockNoParam:" -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "text", -// NOPARAM-NEXT: "spelling": "(" -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "typeIdentifier", -// NOPARAM-NEXT: "preciseIdentifier": "c:v", -// NOPARAM-NEXT: "spelling": "void" -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "text", -// NOPARAM-NEXT: "spelling": " (^" -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "text", -// NOPARAM-NEXT: "spelling": ")()) " -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "internalParam", -// NOPARAM-NEXT: "spelling": "block" -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "text", -// NOPARAM-NEXT: "spelling": ";" -// NOPARAM-NEXT: } -// NOPARAM-NEXT: ], -// NOPARAM: "functionSignature": { -// NOPARAM-NEXT: "parameters": [ -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "declarationFragments": [ -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "text", -// NOPARAM-NEXT: "spelling": "(" -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "typeIdentifier", -// NOPARAM-NEXT: "preciseIdentifier": "c:v", -// NOPARAM-NEXT: "spelling": "void" -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "text", -// NOPARAM-NEXT: "spelling": " (^" -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "text", -// NOPARAM-NEXT: "spelling": ")()) " -// NOPARAM-NEXT: }, -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "internalParam", -// NOPARAM-NEXT: "spelling": "block" -// NOPARAM-NEXT: } -// NOPARAM-NEXT: ], -// NOPARAM-NEXT: "name": "block" -// NOPARAM-NEXT: } -// NOPARAM-NEXT: ], -// NOPARAM-NEXT: "returns": [ -// NOPARAM-NEXT: { -// NOPARAM-NEXT: "kind": "typeIdentifier", -// NOPARAM-NEXT: "preciseIdentifier": "c:v", -// NOPARAM-NEXT: "spelling": "void" -// NOPARAM-NEXT: } -// NOPARAM-NEXT: ] -// NOPARAM-NEXT: } - -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix PARAM -(void)methodBlockWithParam:(int (^)(int foo))block; -// PARAM-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockWithParam:" -// PARAM: "declarationFragments": [ -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": "- (" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "typeIdentifier", -// PARAM-NEXT: "preciseIdentifier": "c:v", -// PARAM-NEXT: "spelling": "void" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": ") " -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "identifier", -// PARAM-NEXT: "spelling": "methodBlockWithParam:" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": "(" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "typeIdentifier", -// PARAM-NEXT: "preciseIdentifier": "c:I", -// PARAM-NEXT: "spelling": "int" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": " (^" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": ")(" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "typeIdentifier", -// PARAM-NEXT: "preciseIdentifier": "c:I", -// PARAM-NEXT: "spelling": "int" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": " " -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "internalParam", -// PARAM-NEXT: "spelling": "foo" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": ")) " -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "internalParam", -// PARAM-NEXT: "spelling": "block" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": ";" -// PARAM-NEXT: } -// PARAM-NEXT: ], -// PARAM: "functionSignature": { -// PARAM-NEXT: "parameters": [ -// PARAM-NEXT: { -// PARAM-NEXT: "declarationFragments": [ -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": "(" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "typeIdentifier", -// PARAM-NEXT: "preciseIdentifier": "c:I", -// PARAM-NEXT: "spelling": "int" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": " (^" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": ")(" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "typeIdentifier", -// PARAM-NEXT: "preciseIdentifier": "c:I", -// PARAM-NEXT: "spelling": "int" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": " " -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "internalParam", -// PARAM-NEXT: "spelling": "foo" -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "text", -// PARAM-NEXT: "spelling": ")) " -// PARAM-NEXT: }, -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "internalParam", -// PARAM-NEXT: "spelling": "block" -// PARAM-NEXT: } -// PARAM-NEXT: ], -// PARAM-NEXT: "name": "block" -// PARAM-NEXT: } -// PARAM-NEXT: ], -// PARAM-NEXT: "returns": [ -// PARAM-NEXT: { -// PARAM-NEXT: "kind": "typeIdentifier", -// PARAM-NEXT: "preciseIdentifier": "c:v", -// PARAM-NEXT: "spelling": "void" -// PARAM-NEXT: } -// PARAM-NEXT: ] -// PARAM-NEXT: } - -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix MULTIPARAM -(void)methodBlockWithMultipleParam:(int (^)(int foo, unsigned baz))block; -// MULTIPARAM-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockWithMultipleParam:" -// MULTIPARAM: "declarationFragments": [ -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": "- (" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "typeIdentifier", -// MULTIPARAM-NEXT: "preciseIdentifier": "c:v", -// MULTIPARAM-NEXT: "spelling": "void" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": ") " -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "identifier", -// MULTIPARAM-NEXT: "spelling": "methodBlockWithMultipleParam:" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": "(" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "typeIdentifier", -// MULTIPARAM-NEXT: "preciseIdentifier": "c:I", -// MULTIPARAM-NEXT: "spelling": "int" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": " (^" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": ")(" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "typeIdentifier", -// MULTIPARAM-NEXT: "preciseIdentifier": "c:I", -// MULTIPARAM-NEXT: "spelling": "int" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": " " -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "internalParam", -// MULTIPARAM-NEXT: "spelling": "foo" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": ", " -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "typeIdentifier", -// MULTIPARAM-NEXT: "preciseIdentifier": "c:i", -// MULTIPARAM-NEXT: "spelling": "unsigned int" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": " " -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "internalParam", -// MULTIPARAM-NEXT: "spelling": "baz" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": ")) " -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "internalParam", -// MULTIPARAM-NEXT: "spelling": "block" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": ";" -// MULTIPARAM-NEXT: } -// MULTIPARAM-NEXT: ], -// MULTIPARAM: "functionSignature": { -// MULTIPARAM-NEXT: "parameters": [ -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "declarationFragments": [ -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": "(" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "typeIdentifier", -// MULTIPARAM-NEXT: "preciseIdentifier": "c:I", -// MULTIPARAM-NEXT: "spelling": "int" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": " (^" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": ")(" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "typeIdentifier", -// MULTIPARAM-NEXT: "preciseIdentifier": "c:I", -// MULTIPARAM-NEXT: "spelling": "int" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": " " -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "internalParam", -// MULTIPARAM-NEXT: "spelling": "foo" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": ", " -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "typeIdentifier", -// MULTIPARAM-NEXT: "preciseIdentifier": "c:i", -// MULTIPARAM-NEXT: "spelling": "unsigned int" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": " " -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "internalParam", -// MULTIPARAM-NEXT: "spelling": "baz" -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "text", -// MULTIPARAM-NEXT: "spelling": ")) " -// MULTIPARAM-NEXT: }, -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "internalParam", -// MULTIPARAM-NEXT: "spelling": "block" -// MULTIPARAM-NEXT: } -// MULTIPARAM-NEXT: ], -// MULTIPARAM-NEXT: "name": "block" -// MULTIPARAM-NEXT: } -// MULTIPARAM-NEXT: ], -// MULTIPARAM-NEXT: "returns": [ -// MULTIPARAM-NEXT: { -// MULTIPARAM-NEXT: "kind": "typeIdentifier", -// MULTIPARAM-NEXT: "preciseIdentifier": "c:v", -// MULTIPARAM-NEXT: "spelling": "void" -// MULTIPARAM-NEXT: } -// MULTIPARAM-NEXT: ] -// MULTIPARAM-NEXT: }, - -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix VARIADIC -(void)methodBlockVariadic:(int (^)(int foo, ...))block; -// VARIADIC-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockVariadic:" -// VARIADIC: "declarationFragments": [ -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": "- (" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "typeIdentifier", -// VARIADIC-NEXT: "preciseIdentifier": "c:v", -// VARIADIC-NEXT: "spelling": "void" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": ") " -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "identifier", -// VARIADIC-NEXT: "spelling": "methodBlockVariadic:" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": "(" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "typeIdentifier", -// VARIADIC-NEXT: "preciseIdentifier": "c:I", -// VARIADIC-NEXT: "spelling": "int" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": " (^" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": ")(" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "typeIdentifier", -// VARIADIC-NEXT: "preciseIdentifier": "c:I", -// VARIADIC-NEXT: "spelling": "int" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": " " -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "internalParam", -// VARIADIC-NEXT: "spelling": "foo" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": ", ...)) " -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "internalParam", -// VARIADIC-NEXT: "spelling": "block" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": ";" -// VARIADIC-NEXT: } -// VARIADIC-NEXT: ], -// VARIADIC: "functionSignature": { -// VARIADIC-NEXT: "parameters": [ -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "declarationFragments": [ -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": "(" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "typeIdentifier", -// VARIADIC-NEXT: "preciseIdentifier": "c:I", -// VARIADIC-NEXT: "spelling": "int" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": " (^" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": ")(" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "typeIdentifier", -// VARIADIC-NEXT: "preciseIdentifier": "c:I", -// VARIADIC-NEXT: "spelling": "int" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": " " -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "internalParam", -// VARIADIC-NEXT: "spelling": "foo" -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "text", -// VARIADIC-NEXT: "spelling": ", ...)) " -// VARIADIC-NEXT: }, -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "internalParam", -// VARIADIC-NEXT: "spelling": "block" -// VARIADIC-NEXT: } -// VARIADIC-NEXT: ], -// VARIADIC-NEXT: "name": "block" -// VARIADIC-NEXT: } -// VARIADIC-NEXT: ], -// VARIADIC-NEXT: "returns": [ -// VARIADIC-NEXT: { -// VARIADIC-NEXT: "kind": "typeIdentifier", -// VARIADIC-NEXT: "preciseIdentifier": "c:v", -// VARIADIC-NEXT: "spelling": "void" -// VARIADIC-NEXT: } -// VARIADIC-NEXT: ] -// VARIADIC-NEXT: }, @end -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUNC void func(int (^arg)(int foo)); -// FUNC-LABEL: "!testLabel": "c:@F@func" -// FUNC: "declarationFragments": [ -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "typeIdentifier", -// FUNC-NEXT: "preciseIdentifier": "c:v", -// FUNC-NEXT: "spelling": "void" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "text", -// FUNC-NEXT: "spelling": " " -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "identifier", -// FUNC-NEXT: "spelling": "func" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "text", -// FUNC-NEXT: "spelling": "(" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "typeIdentifier", -// FUNC-NEXT: "preciseIdentifier": "c:I", -// FUNC-NEXT: "spelling": "int" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "text", -// FUNC-NEXT: "spelling": " (^" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "internalParam", -// FUNC-NEXT: "spelling": "arg" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "text", -// FUNC-NEXT: "spelling": ")(" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "typeIdentifier", -// FUNC-NEXT: "preciseIdentifier": "c:I", -// FUNC-NEXT: "spelling": "int" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "text", -// FUNC-NEXT: "spelling": " " -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "internalParam", -// FUNC-NEXT: "spelling": "foo" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "text", -// FUNC-NEXT: "spelling": "));" -// FUNC-NEXT: } -// FUNC-NEXT: ], -// FUNC: "functionSignature": { -// FUNC-NEXT: "parameters": [ -// FUNC-NEXT: { -// FUNC-NEXT: "declarationFragments": [ -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "typeIdentifier", -// FUNC-NEXT: "preciseIdentifier": "c:I", -// FUNC-NEXT: "spelling": "int" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "text", -// FUNC-NEXT: "spelling": " (^" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "internalParam", -// FUNC-NEXT: "spelling": "arg" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "text", -// FUNC-NEXT: "spelling": ")(" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "typeIdentifier", -// FUNC-NEXT: "preciseIdentifier": "c:I", -// FUNC-NEXT: "spelling": "int" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "text", -// FUNC-NEXT: "spelling": " " -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "internalParam", -// FUNC-NEXT: "spelling": "foo" -// FUNC-NEXT: }, -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "text", -// FUNC-NEXT: "spelling": ")" -// FUNC-NEXT: } -// FUNC-NEXT: ], -// FUNC-NEXT: "name": "arg" -// FUNC-NEXT: } -// FUNC-NEXT: ], -// FUNC-NEXT: "returns": [ -// FUNC-NEXT: { -// FUNC-NEXT: "kind": "typeIdentifier", -// FUNC-NEXT: "preciseIdentifier": "c:v", -// FUNC-NEXT: "spelling": "void" -// FUNC-NEXT: } -// FUNC-NEXT: ] -// FUNC-NEXT: }, -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GLOBAL int (^global)(int foo); -// GLOBAL-LABEL: "!testLabel": "c:@global" -// GLOBAL: "declarationFragments": [ -// GLOBAL-NEXT: { -// GLOBAL-NEXT: "kind": "typeIdentifier", -// GLOBAL-NEXT: "preciseIdentifier": "c:I", -// GLOBAL-NEXT: "spelling": "int" -// GLOBAL-NEXT: }, -// GLOBAL-NEXT: { -// GLOBAL-NEXT: "kind": "text", -// GLOBAL-NEXT: "spelling": " (^" -// GLOBAL-NEXT: }, -// GLOBAL-NEXT: { -// GLOBAL-NEXT: "kind": "identifier", -// GLOBAL-NEXT: "spelling": "global" -// GLOBAL-NEXT: }, -// GLOBAL-NEXT: { -// GLOBAL-NEXT: "kind": "text", -// GLOBAL-NEXT: "spelling": ")(" -// GLOBAL-NEXT: }, -// GLOBAL-NEXT: { -// GLOBAL-NEXT: "kind": "typeIdentifier", -// GLOBAL-NEXT: "preciseIdentifier": "c:I", -// GLOBAL-NEXT: "spelling": "int" -// GLOBAL-NEXT: }, -// GLOBAL-NEXT: { -// GLOBAL-NEXT: "kind": "text", -// GLOBAL-NEXT: "spelling": " " -// GLOBAL-NEXT: }, -// GLOBAL-NEXT: { -// GLOBAL-NEXT: "kind": "internalParam", -// GLOBAL-NEXT: "spelling": "foo" -// GLOBAL-NEXT: }, -// GLOBAL-NEXT: { -// GLOBAL-NEXT: "kind": "text", -// GLOBAL-NEXT: "spelling": ");" -// GLOBAL-NEXT: } -// GLOBAL-NEXT: ], ///expected-no-diagnostics + +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:objc(cs)Foo(im)methodBlockNoParam:", + "target": "c:objc(cs)Foo", + "targetFallback": "Foo" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Foo(im)methodBlockWithParam:", + "target": "c:objc(cs)Foo", + "targetFallback": "Foo" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Foo(im)methodBlockWithMultipleParam:", + "target": "c:objc(cs)Foo", + "targetFallback": "Foo" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Foo(im)methodBlockVariadic:", + "target": "c:objc(cs)Foo", + "targetFallback": "Foo" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "identifier", + "spelling": "global" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ");" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:@global" + }, + "kind": { + "displayName": "Global Variable", + "identifier": "objective-c.var" + }, + "location": { + "position": { + "character": 6, + "line": 9 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "global" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "global" + } + ], + "title": "global" + }, + "pathComponents": [ + "global" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "func" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "internalParam", + "spelling": "arg" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": "));" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "internalParam", + "spelling": "arg" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ")" + } + ], + "name": "arg" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:@F@func" + }, + "kind": { + "displayName": "Function", + "identifier": "objective-c.func" + }, + "location": { + "position": { + "character": 5, + "line": 7 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "func" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "func" + } + ], + "title": "func" + }, + "pathComponents": [ + "func" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Foo" + }, + "kind": { + "displayName": "Class", + "identifier": "objective-c.class" + }, + "location": { + "position": { + "character": 11, + "line": 0 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "title": "Foo" + }, + "pathComponents": [ + "Foo" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "methodBlockNoParam:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")()) " + }, + { + "kind": "internalParam", + "spelling": "block" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")()) " + }, + { + "kind": "internalParam", + "spelling": "block" + } + ], + "name": "block" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Foo(im)methodBlockNoParam:" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 1 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "methodBlockNoParam:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "methodBlockNoParam:" + } + ], + "title": "methodBlockNoParam:" + }, + "pathComponents": [ + "Foo", + "methodBlockNoParam:" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "methodBlockWithParam:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ")) " + }, + { + "kind": "internalParam", + "spelling": "block" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ")) " + }, + { + "kind": "internalParam", + "spelling": "block" + } + ], + "name": "block" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Foo(im)methodBlockWithParam:" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 2 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "methodBlockWithParam:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "methodBlockWithParam:" + } + ], + "title": "methodBlockWithParam:" + }, + "pathComponents": [ + "Foo", + "methodBlockWithParam:" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "methodBlockWithMultipleParam:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ", " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "baz" + }, + { + "kind": "text", + "spelling": ")) " + }, + { + "kind": "internalParam", + "spelling": "block" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ", " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "baz" + }, + { + "kind": "text", + "spelling": ")) " + }, + { + "kind": "internalParam", + "spelling": "block" + } + ], + "name": "block" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Foo(im)methodBlockWithMultipleParam:" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 3 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "methodBlockWithMultipleParam:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "methodBlockWithMultipleParam:" + } + ], + "title": "methodBlockWithMultipleParam:" + }, + "pathComponents": [ + "Foo", + "methodBlockWithMultipleParam:" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "methodBlockVariadic:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ", ...)) " + }, + { + "kind": "internalParam", + "spelling": "block" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ", ...)) " + }, + { + "kind": "internalParam", + "spelling": "block" + } + ], + "name": "block" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Foo(im)methodBlockVariadic:" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "methodBlockVariadic:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "methodBlockVariadic:" + } + ], + "title": "methodBlockVariadic:" + }, + "pathComponents": [ + "Foo", + "methodBlockVariadic:" + ] + } + ] +} diff --git a/clang/test/ExtractAPI/objc_category.m b/clang/test/ExtractAPI/objc_category.m index 9177d40..34b0a9e 100644 --- a/clang/test/ExtractAPI/objc_category.m +++ b/clang/test/ExtractAPI/objc_category.m @@ -1,21 +1,341 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ -// RUN: -triple arm64-apple-macosx -x objective-c-header %s -o - -verify | FileCheck %s +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang -extract-api -x objective-c-header -target arm64-apple-macosx \ +// RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s -@protocol Protocol -@end +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +// CHECK-NOT: error: +// CHECK-NOT: warning: + +//--- input.h +@protocol Protocol; @interface Interface @end @interface Interface (Category) <Protocol> -// CHECK-DAG: "!testRelLabel": "conformsTo $ c:objc(cs)Interface $ c:objc(pl)Protocol" @property int Property; -// CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(py)Property $ c:objc(cs)Interface" - (void)InstanceMethod; -// CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(im)InstanceMethod $ c:objc(cs)Interface" + (void)ClassMethod; -// CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(cm)ClassMethod $ c:objc(cs)Interface" @end -// expected-no-diagnostics +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:objc(cs)Interface(im)InstanceMethod", + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Interface(cm)ClassMethod", + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Interface(py)Property", + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" + }, + { + "kind": "conformsTo", + "source": "c:objc(cs)Interface", + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Interface" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Interface" + }, + "kind": { + "displayName": "Class", + "identifier": "objective-c.class" + }, + "location": { + "position": { + "character": 11, + "line": 2 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Interface" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Interface" + } + ], + "title": "Interface" + }, + "pathComponents": [ + "Interface" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "InstanceMethod" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Interface(im)InstanceMethod" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 7 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "InstanceMethod" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "InstanceMethod" + } + ], + "title": "InstanceMethod" + }, + "pathComponents": [ + "Interface", + "InstanceMethod" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "+ (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "ClassMethod" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Interface(cm)ClassMethod" + }, + "kind": { + "displayName": "Type Method", + "identifier": "objective-c.type.method" + }, + "location": { + "position": { + "character": 0, + "line": 8 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "ClassMethod" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "+ " + }, + { + "kind": "identifier", + "spelling": "ClassMethod" + } + ], + "title": "ClassMethod" + }, + "pathComponents": [ + "Interface", + "ClassMethod" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@property" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Property" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Interface(py)Property" + }, + "kind": { + "displayName": "Instance Property", + "identifier": "objective-c.property" + }, + "location": { + "position": { + "character": 14, + "line": 6 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Property" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Property" + } + ], + "title": "Property" + }, + "pathComponents": [ + "Interface", + "Property" + ] + } + ] +} diff --git a/clang/test/ExtractAPI/objc_external_category.m b/clang/test/ExtractAPI/objc_external_category.m deleted file mode 100644 index 47e699c..0000000 --- a/clang/test/ExtractAPI/objc_external_category.m +++ /dev/null @@ -1,49 +0,0 @@ -// RUN: rm -rf %t -// RUN: split-file %s %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ -// RUN: --emit-extension-symbol-graphs --symbol-graph-dir=%t/symbols \ -// RUN: --product-name=Module -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/modules-cache \ -// RUN: -triple arm64-apple-macosx -x objective-c-header %t/input.h -verify - -//--- input.h -#include "ExternalModule.h" - -@interface ExtInterface (Category) -@property int Property; -- (void)InstanceMethod; -+ (void)ClassMethod; -@end - -@interface ModInterface -@end - -// expected-no-diagnostics - -//--- ExternalModule.h -@interface ExtInterface -@end - -//--- module.modulemap -module ExternalModule { - header "ExternalModule.h" -} - -// RUN: FileCheck %s --input-file %t/symbols/Module.symbols.json --check-prefix MOD -// MOD-NOT: "!testRelLabel": "memberOf $ c:objc(cs)ExtInterface(py)Property $ c:objc(cs)ExtInterface" -// MOD-NOT: "!testRelLabel": "memberOf $ c:objc(cs)ExtInterface(im)InstanceMethod $ c:objc(cs)ExtInterface" -// MOD-NOT: "!testRelLabel": "memberOf $ c:objc(cs)ExtInterface(cm)ClassMethod $ c:objc(cs)ExtInterface" -// MOD-NOT: "!testLabel": "c:objc(cs)ExtInterface(py)Property" -// MOD-NOT: "!testLabel": "c:objc(cs)ExtInterface(im)InstanceMethod" -// MOD-NOT: "!testLabel": "c:objc(cs)ExtInterface(cm)ClassMethod" -// MOD-NOT: "!testLabel": "c:objc(cs)ExtInterface" -// MOD-DAG: "!testLabel": "c:objc(cs)ModInterface" - -// RUN: FileCheck %s --input-file %t/symbols/ExternalModule@Module.symbols.json --check-prefix EXT -// EXT-DAG: "!testRelLabel": "memberOf $ c:objc(cs)ExtInterface(py)Property $ c:objc(cs)ExtInterface" -// EXT-DAG: "!testRelLabel": "memberOf $ c:objc(cs)ExtInterface(im)InstanceMethod $ c:objc(cs)ExtInterface" -// EXT-DAG: "!testRelLabel": "memberOf $ c:objc(cs)ExtInterface(cm)ClassMethod $ c:objc(cs)ExtInterface" -// EXT-DAG: "!testLabel": "c:objc(cs)ExtInterface(py)Property" -// EXT-DAG: "!testLabel": "c:objc(cs)ExtInterface(im)InstanceMethod" -// EXT-DAG: "!testLabel": "c:objc(cs)ExtInterface(cm)ClassMethod" -// EXT-NOT: "!testLabel": "c:objc(cs)ExtInterface" -// EXT-NOT: "!testLabel": "c:objc(cs)ModInterface" diff --git a/clang/test/ExtractAPI/objc_id_protocol.m b/clang/test/ExtractAPI/objc_id_protocol.m index f2a03a9..0b0f1b3 100644 --- a/clang/test/ExtractAPI/objc_id_protocol.m +++ b/clang/test/ExtractAPI/objc_id_protocol.m @@ -1,56 +1,317 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ -// RUN: -x objective-c-header -triple arm64-apple-macosx %s -o - -verify | FileCheck %s +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang -extract-api -x objective-c-header -target arm64-apple-macosx \ +// RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +// CHECK-NOT: error: +// CHECK-NOT: warning: + +//--- input.h @protocol MyProtocol @end @interface MyInterface @property(copy, readwrite) id<MyProtocol> obj1; -// CHECK-LABEL: "!testLabel": "c:objc(cs)MyInterface(py)obj1" -// CHECK: "declarationFragments": [ -// CHECK-NEXT: { -// CHECK-NEXT: "kind": "keyword", -// CHECK-NEXT: "spelling": "@property" -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "kind": "text", -// CHECK-NEXT: "spelling": " (" -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "kind": "keyword", -// CHECK-NEXT: "spelling": "copy" -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "kind": "text", -// CHECK-NEXT: "spelling": ", " -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "kind": "keyword", -// CHECK-NEXT: "spelling": "readwrite" -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "kind": "text", -// CHECK-NEXT: "spelling": ") " -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "kind": "typeIdentifier", -// CHECK-NEXT: "preciseIdentifier": "c:Qoobjc(pl)MyProtocol", -// CHECK-NEXT: "spelling": "id<MyProtocol>" -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "kind": "text", -// CHECK-NEXT: "spelling": " " -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "kind": "identifier", -// CHECK-NEXT: "spelling": "obj1" -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "kind": "text", -// CHECK-NEXT: "spelling": ";" -// CHECK-NEXT: } -// CHECK-NEXT: ], +@property(readwrite) id<MyProtocol> *obj2; @end - -// expected-no-diagnostics +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:objc(cs)MyInterface(py)obj1", + "target": "c:objc(cs)MyInterface", + "targetFallback": "MyInterface" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)MyInterface(py)obj2", + "target": "c:objc(cs)MyInterface", + "targetFallback": "MyInterface" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "MyInterface" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)MyInterface" + }, + "kind": { + "displayName": "Class", + "identifier": "objective-c.class" + }, + "location": { + "position": { + "character": 11, + "line": 3 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyInterface" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "MyInterface" + } + ], + "title": "MyInterface" + }, + "pathComponents": [ + "MyInterface" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@property" + }, + { + "kind": "text", + "spelling": " (" + }, + { + "kind": "keyword", + "spelling": "copy" + }, + { + "kind": "text", + "spelling": ", " + }, + { + "kind": "keyword", + "spelling": "readwrite" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:Qoobjc(pl)MyProtocol", + "spelling": "id<MyProtocol>" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "obj1" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)MyInterface(py)obj1" + }, + "kind": { + "displayName": "Instance Property", + "identifier": "objective-c.property" + }, + "location": { + "position": { + "character": 42, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "obj1" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "obj1" + } + ], + "title": "obj1" + }, + "pathComponents": [ + "MyInterface", + "obj1" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@property" + }, + { + "kind": "text", + "spelling": " (" + }, + { + "kind": "keyword", + "spelling": "readwrite" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:Qoobjc(pl)MyProtocol", + "spelling": "id<MyProtocol>" + }, + { + "kind": "text", + "spelling": " * " + }, + { + "kind": "identifier", + "spelling": "obj2" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)MyInterface(py)obj2" + }, + "kind": { + "displayName": "Instance Property", + "identifier": "objective-c.property" + }, + "location": { + "position": { + "character": 37, + "line": 5 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "obj2" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "obj2" + } + ], + "title": "obj2" + }, + "pathComponents": [ + "MyInterface", + "obj2" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@protocol" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "MyProtocol" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(pl)MyProtocol" + }, + "kind": { + "displayName": "Protocol", + "identifier": "objective-c.protocol" + }, + "location": { + "position": { + "character": 10, + "line": 0 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyProtocol" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "MyProtocol" + } + ], + "title": "MyProtocol" + }, + "pathComponents": [ + "MyProtocol" + ] + } + ] +} diff --git a/clang/test/ExtractAPI/objc_instancetype.m b/clang/test/ExtractAPI/objc_instancetype.m index 071ebe4..d9d259f 100644 --- a/clang/test/ExtractAPI/objc_instancetype.m +++ b/clang/test/ExtractAPI/objc_instancetype.m @@ -1,8 +1,8 @@ // RUN: rm -rf %t // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ -// RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx -x objective-c-header %t/input.h -o %t/output.json -verify + // RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx -x objective-c-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. // RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ diff --git a/clang/test/ExtractAPI/objc_interface.m b/clang/test/ExtractAPI/objc_interface.m index 4abccdd..ab1772a 100644 --- a/clang/test/ExtractAPI/objc_interface.m +++ b/clang/test/ExtractAPI/objc_interface.m @@ -1,360 +1,701 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ -// RUN: -x objective-c-header -triple arm64-apple-macosx %s -o %t/output.symbols.json -verify +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang -extract-api -x objective-c-header -target arm64-apple-macosx \ +// RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s -@protocol Protocol -@end +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SUPER -@interface Super <Protocol> -// SUPER: "!testRelLabel": "conformsTo $ c:objc(cs)Super $ c:objc(pl)Protocol" -// SUPER-LABEL: "!testLabel": "c:objc(cs)Super" -// SUPER: "accessLevel": "public", -// SUPER: "declarationFragments": [ -// SUPER-NEXT: { -// SUPER-NEXT: "kind": "keyword", -// SUPER-NEXT: "spelling": "@interface" -// SUPER-NEXT: }, -// SUPER-NEXT: { -// SUPER-NEXT: "kind": "text", -// SUPER-NEXT: "spelling": " " -// SUPER-NEXT: }, -// SUPER-NEXT: { -// SUPER-NEXT: "kind": "identifier", -// SUPER-NEXT: "spelling": "Super" -// SUPER-NEXT: } -// SUPER-NEXT: ], -// SUPER: "kind": { -// SUPER-NEXT: "displayName": "Class", -// SUPER-NEXT: "identifier": "objective-c.class" -// SUPER-NEXT: }, -// SUPER: "title": "Super" -// SUPER: "pathComponents": [ -// SUPER-NEXT: "Super" -// SUPER-NEXT: ] +// CHECK-NOT: error: +// CHECK-NOT: warning: -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix PROP -@property(readonly, getter=getProperty) unsigned Property; -// PROP: "!testRelLabel": "memberOf $ c:objc(cs)Super(py)Property $ c:objc(cs)Super" -// PROP: "!testLabel": "c:objc(cs)Super(py)Property" -// PROP: "accessLevel": "public", -// PROP: "declarationFragments": [ -// PROP-NEXT: { -// PROP-NEXT: "kind": "keyword", -// PROP-NEXT: "spelling": "@property" -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "text", -// PROP-NEXT: "spelling": " (" -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "keyword", -// PROP-NEXT: "spelling": "readonly" -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "text", -// PROP-NEXT: "spelling": ", " -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "keyword", -// PROP-NEXT: "spelling": "getter" -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "text", -// PROP-NEXT: "spelling": "=" -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "identifier", -// PROP-NEXT: "spelling": "getProperty" -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "text", -// PROP-NEXT: "spelling": ") " -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "typeIdentifier", -// PROP-NEXT: "preciseIdentifier": "c:i", -// PROP-NEXT: "spelling": "unsigned int" -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "text", -// PROP-NEXT: "spelling": " " -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "identifier", -// PROP-NEXT: "spelling": "Property" -// PROP-NEXT: }, -// PROP-NEXT: { -// PROP-NEXT: "kind": "text", -// PROP-NEXT: "spelling": ";" -// PROP-NEXT: } -// PROP-NEXT: ], -// PROP: "kind": { -// PROP-NEXT: "displayName": "Instance Property", -// PROP-NEXT: "identifier": "objective-c.property" -// PROP-NEXT: }, -// PROP: "title": "Property" -// PROP: "pathComponents": [ -// PROP-NEXT: "Super", -// PROP-NEXT: "Property" -// PROP-NEXT: ] +//--- input.h +@protocol Protocol; -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GET +@interface Super <Protocol> +@property(readonly, getter=getProperty) unsigned Property; + (id)getWithProperty:(unsigned) Property; -// GET: "!testRelLabel": "memberOf $ c:objc(cs)Super(cm)getWithProperty: $ c:objc(cs)Super" -// GET-LABEL: "!testLabel": "c:objc(cs)Super(cm)getWithProperty:" -// GET: "accessLevel": "public", -// GET: "declarationFragments": [ -// GET-NEXT: { -// GET-NEXT: "kind": "text", -// GET-NEXT: "spelling": "+ (" -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "keyword", -// GET-NEXT: "spelling": "id" -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "text", -// GET-NEXT: "spelling": ") " -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "identifier", -// GET-NEXT: "spelling": "getWithProperty:" -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "text", -// GET-NEXT: "spelling": "(" -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "typeIdentifier", -// GET-NEXT: "preciseIdentifier": "c:i", -// GET-NEXT: "spelling": "unsigned int" -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "text", -// GET-NEXT: "spelling": ") " -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "internalParam", -// GET-NEXT: "spelling": "Property" -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "text", -// GET-NEXT: "spelling": ";" -// GET-NEXT: } -// GET-NEXT: ], -// GET: "functionSignature": { -// GET-NEXT: "parameters": [ -// GET-NEXT: { -// GET-NEXT: "declarationFragments": [ -// GET-NEXT: { -// GET-NEXT: "kind": "text", -// GET-NEXT: "spelling": "(" -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "typeIdentifier", -// GET-NEXT: "preciseIdentifier": "c:i", -// GET-NEXT: "spelling": "unsigned int" -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "text", -// GET-NEXT: "spelling": ") " -// GET-NEXT: }, -// GET-NEXT: { -// GET-NEXT: "kind": "internalParam", -// GET-NEXT: "spelling": "Property" -// GET-NEXT: } -// GET-NEXT: ], -// GET-NEXT: "name": "Property" -// GET-NEXT: } -// GET-NEXT: ], -// GET-NEXT: "returns": [ -// GET-NEXT: { -// GET-NEXT: "kind": "keyword", -// GET-NEXT: "spelling": "id" -// GET-NEXT: } -// GET-NEXT: ] -// GET-NEXT: }, -// GET: "kind": { -// GET-NEXT: "displayName": "Type Method", -// GET-NEXT: "identifier": "objective-c.type.method" -// GET-NEXT: }, -// GET: "title": "getWithProperty:" -// GET: "pathComponents": [ -// GET-NEXT: "Super", -// GET-NEXT: "getWithProperty:" -// GET-NEXT: ] - -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix SET - (void)setProperty:(unsigned) Property andOtherThing: (unsigned) Thing; -// SET: "!testRelLabel": "memberOf $ c:objc(cs)Super(im)setProperty:andOtherThing: $ c:objc(cs)Super" -// SET-LABEL: "!testLabel": "c:objc(cs)Super(im)setProperty:andOtherThing:" -// SET: "accessLevel": "public", -// SET: "declarationFragments": [ -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": "- (" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "typeIdentifier", -// SET-NEXT: "preciseIdentifier": "c:v", -// SET-NEXT: "spelling": "void" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": ") " -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "identifier", -// SET-NEXT: "spelling": "setProperty:" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": "(" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "typeIdentifier", -// SET-NEXT: "preciseIdentifier": "c:i", -// SET-NEXT: "spelling": "unsigned int" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": ") " -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "internalParam", -// SET-NEXT: "spelling": "Property" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": " " -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "identifier", -// SET-NEXT: "spelling": "andOtherThing:" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": "(" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "typeIdentifier", -// SET-NEXT: "preciseIdentifier": "c:i", -// SET-NEXT: "spelling": "unsigned int" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": ") " -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "internalParam", -// SET-NEXT: "spelling": "Thing" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": ";" -// SET-NEXT: } -// SET-NEXT: ], -// SET: "functionSignature": { -// SET-NEXT: "parameters": [ -// SET-NEXT: { -// SET-NEXT: "declarationFragments": [ -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": "(" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "typeIdentifier", -// SET-NEXT: "preciseIdentifier": "c:i", -// SET-NEXT: "spelling": "unsigned int" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": ") " -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "internalParam", -// SET-NEXT: "spelling": "Property" -// SET-NEXT: } -// SET-NEXT: ], -// SET-NEXT: "name": "Property" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "declarationFragments": [ -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": "(" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "typeIdentifier", -// SET-NEXT: "preciseIdentifier": "c:i", -// SET-NEXT: "spelling": "unsigned int" -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "text", -// SET-NEXT: "spelling": ") " -// SET-NEXT: }, -// SET-NEXT: { -// SET-NEXT: "kind": "internalParam", -// SET-NEXT: "spelling": "Thing" -// SET-NEXT: } -// SET-NEXT: ], -// SET-NEXT: "name": "Thing" -// SET-NEXT: } -// SET-NEXT: ], -// SET-NEXT: "returns": [ -// SET-NEXT: { -// SET-NEXT: "kind": "typeIdentifier", -// SET-NEXT: "preciseIdentifier": "c:v", -// SET-NEXT: "spelling": "void" -// SET-NEXT: } -// SET-NEXT: ] -// SET-NEXT: }, -// SET: "kind": { -// SET-NEXT: "displayName": "Instance Method", -// SET-NEXT: "identifier": "objective-c.method" -// SET-NEXT: }, -// SET: "title": "setProperty:andOtherThing:" @end -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix DERIVED @interface Derived : Super { -// DERIVED: "!testRelLabel": "inheritsFrom $ c:objc(cs)Derived $ c:objc(cs)Super" - -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix IVAR char Ivar; -// IVAR: "!testRelLabel": "memberOf $ c:objc(cs)Derived@Ivar $ c:objc(cs)Derived" -// IVAR-LABEL: "!testLabel": "c:objc(cs)Derived@Ivar" -// IVAR: "accessLevel": "public", -// IVAR: "declarationFragments": [ -// IVAR-NEXT: { -// IVAR-NEXT: "kind": "typeIdentifier", -// IVAR-NEXT: "preciseIdentifier": "c:C", -// IVAR-NEXT: "spelling": "char" -// IVAR-NEXT: }, -// IVAR-NEXT: { -// IVAR-NEXT: "kind": "text", -// IVAR-NEXT: "spelling": " " -// IVAR-NEXT: }, -// IVAR-NEXT: { -// IVAR-NEXT: "kind": "identifier", -// IVAR-NEXT: "spelling": "Ivar" -// IVAR-NEXT: }, -// IVAR-NEXT: { -// IVAR-NEXT: "kind": "text", -// IVAR-NEXT: "spelling": ";" -// IVAR-NEXT: } -// IVAR-NEXT: ], -// IVAR: "kind": { -// IVAR-NEXT: "displayName": "Instance Variable", -// IVAR-NEXT: "identifier": "objective-c.ivar" -// IVAR-NEXT: }, -// IVAR: "title": "Ivar" -// IVAR: "pathComponents": [ -// IVAR-NEXT: "Derived", -// IVAR-NEXT: "Ivar" -// IVAR-NEXT: ] } +- (char)getIvar; @end -// expected-no-diagnostics +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:objc(cs)Super(cm)getWithProperty:", + "target": "c:objc(cs)Super", + "targetFallback": "Super" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Super(im)setProperty:andOtherThing:", + "target": "c:objc(cs)Super", + "targetFallback": "Super" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Super(py)Property", + "target": "c:objc(cs)Super", + "targetFallback": "Super" + }, + { + "kind": "conformsTo", + "source": "c:objc(cs)Super", + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Derived@Ivar", + "target": "c:objc(cs)Derived", + "targetFallback": "Derived" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Derived(im)getIvar", + "target": "c:objc(cs)Derived", + "targetFallback": "Derived" + }, + { + "kind": "inheritsFrom", + "source": "c:objc(cs)Derived", + "target": "c:objc(cs)Super", + "targetFallback": "Super" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Super" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Super" + }, + "kind": { + "displayName": "Class", + "identifier": "objective-c.class" + }, + "location": { + "position": { + "character": 11, + "line": 2 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Super" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Super" + } + ], + "title": "Super" + }, + "pathComponents": [ + "Super" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "+ (" + }, + { + "kind": "keyword", + "spelling": "id" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "getWithProperty:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "internalParam", + "spelling": "Property" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "internalParam", + "spelling": "Property" + } + ], + "name": "Property" + } + ], + "returns": [ + { + "kind": "keyword", + "spelling": "id" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Super(cm)getWithProperty:" + }, + "kind": { + "displayName": "Type Method", + "identifier": "objective-c.type.method" + }, + "location": { + "position": { + "character": 0, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "getWithProperty:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "+ " + }, + { + "kind": "identifier", + "spelling": "getWithProperty:" + } + ], + "title": "getWithProperty:" + }, + "pathComponents": [ + "Super", + "getWithProperty:" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "setProperty:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "internalParam", + "spelling": "Property" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "andOtherThing:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "internalParam", + "spelling": "Thing" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "internalParam", + "spelling": "Property" + } + ], + "name": "Property" + }, + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "internalParam", + "spelling": "Thing" + } + ], + "name": "Thing" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Super(im)setProperty:andOtherThing:" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 5 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "setProperty:andOtherThing:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "setProperty:andOtherThing:" + } + ], + "title": "setProperty:andOtherThing:" + }, + "pathComponents": [ + "Super", + "setProperty:andOtherThing:" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@property" + }, + { + "kind": "text", + "spelling": " (" + }, + { + "kind": "keyword", + "spelling": "readonly" + }, + { + "kind": "text", + "spelling": ", " + }, + { + "kind": "keyword", + "spelling": "getter" + }, + { + "kind": "text", + "spelling": "=" + }, + { + "kind": "identifier", + "spelling": "getProperty" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Property" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Super(py)Property" + }, + "kind": { + "displayName": "Instance Property", + "identifier": "objective-c.property" + }, + "location": { + "position": { + "character": 49, + "line": 3 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Property" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Property" + } + ], + "title": "Property" + }, + "pathComponents": [ + "Super", + "Property" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Derived" + }, + { + "kind": "text", + "spelling": " : " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:objc(cs)Super", + "spelling": "Super" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Derived" + }, + "kind": { + "displayName": "Class", + "identifier": "objective-c.class" + }, + "location": { + "position": { + "character": 11, + "line": 8 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Derived" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Derived" + } + ], + "title": "Derived" + }, + "pathComponents": [ + "Derived" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:C", + "spelling": "char" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Ivar" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Derived@Ivar" + }, + "kind": { + "displayName": "Instance Variable", + "identifier": "objective-c.ivar" + }, + "location": { + "position": { + "character": 7, + "line": 9 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Ivar" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Ivar" + } + ], + "title": "Ivar" + }, + "pathComponents": [ + "Derived", + "Ivar" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:C", + "spelling": "char" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "getIvar" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:C", + "spelling": "char" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Derived(im)getIvar" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 11 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "getIvar" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "getIvar" + } + ], + "title": "getIvar" + }, + "pathComponents": [ + "Derived", + "getIvar" + ] + } + ] +} diff --git a/clang/test/ExtractAPI/objc_module_category.m b/clang/test/ExtractAPI/objc_module_category.m new file mode 100644 index 0000000..708ed10 --- /dev/null +++ b/clang/test/ExtractAPI/objc_module_category.m @@ -0,0 +1,404 @@ +// RUN: rm -rf %t +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang -extract-api -x objective-c-header \ +// RUN: -target arm64-apple-macosx \ +// RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s + +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +// CHECK-NOT: error: +// CHECK-NOT: warning: + +//--- input.h +#import "Foundation.h" + +/// Doc comment 1 +@interface NSString (Category1) +-(void)method1; +@end + +/// Doc comment 2 +@interface NSString (Category2) +-(void)method2; +@end + +//--- Foundation.h +@interface NSString +@end + +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "extensionTo", + "source": "c:objc(cy)NSString@Category1", + "target": "c:objc(cs)NSString", + "targetFallback": "NSString" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)NSString(im)method1", + "target": "c:objc(cy)NSString@Category1", + "targetFallback": "Category1" + }, + { + "kind": "extensionTo", + "source": "c:objc(cy)NSString@Category2", + "target": "c:objc(cs)NSString", + "targetFallback": "NSString" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)NSString(im)method2", + "target": "c:objc(cy)NSString@Category2", + "targetFallback": "Category2" + } + ], + "symbols": [ + { + "accessLevel": "public", + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cy)NSString@Category1" + }, + "kind": { + "displayName": "Module Extension", + "identifier": "objective-c.module.extension" + } + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:objc(cs)NSString", + "spelling": "NSString" + }, + { + "kind": "text", + "spelling": " (" + }, + { + "kind": "identifier", + "spelling": "Category1" + }, + { + "kind": "text", + "spelling": ")" + } + ], + "docComment": { + "lines": [ + { + "range": { + "end": { + "character": 17, + "line": 2 + }, + "start": { + "character": 4, + "line": 2 + } + }, + "text": "Doc comment 1" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cy)NSString@Category1" + }, + "kind": { + "displayName": "Class Extension", + "identifier": "objective-c.class.extension" + }, + "location": { + "position": { + "character": 11, + "line": 3 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Category1" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Category1" + } + ], + "title": "NSString (Category1)" + }, + "pathComponents": [ + "Category1" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "method1" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)NSString(im)method1" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "method1" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "method1" + } + ], + "title": "method1" + }, + "pathComponents": [ + "Category1", + "method1" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:objc(cs)NSString", + "spelling": "NSString" + }, + { + "kind": "text", + "spelling": " (" + }, + { + "kind": "identifier", + "spelling": "Category2" + }, + { + "kind": "text", + "spelling": ")" + } + ], + "docComment": { + "lines": [ + { + "range": { + "end": { + "character": 17, + "line": 7 + }, + "start": { + "character": 4, + "line": 7 + } + }, + "text": "Doc comment 2" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cy)NSString@Category2" + }, + "kind": { + "displayName": "Class Extension", + "identifier": "objective-c.class.extension" + }, + "location": { + "position": { + "character": 11, + "line": 8 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Category2" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Category2" + } + ], + "title": "NSString (Category2)" + }, + "pathComponents": [ + "Category2" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "method2" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)NSString(im)method2" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 9 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "method2" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "method2" + } + ], + "title": "method2" + }, + "pathComponents": [ + "Category2", + "method2" + ] + } + ] +} diff --git a/clang/test/ExtractAPI/objc_property.m b/clang/test/ExtractAPI/objc_property.m index f05584c..5712abc 100644 --- a/clang/test/ExtractAPI/objc_property.m +++ b/clang/test/ExtractAPI/objc_property.m @@ -1,26 +1,608 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ -// RUN: -triple arm64-apple-macosx -x objective-c-header %s -o - -verify | FileCheck %s +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx -x objective-c-header %t/input.h -o %t/output.json -verify +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +//--- input.h @protocol Protocol @property(class) int myProtocolTypeProp; -// CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(pl)Protocol(cpy)myProtocolTypeProp $ c:objc(pl)Protocol" @property int myProtocolInstanceProp; -// CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(pl)Protocol(py)myProtocolInstanceProp $ c:objc(pl)Protocol" @end @interface Interface @property(class) int myInterfaceTypeProp; -// CHECk-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(cpy)myInterfaceTypeProp $ c:objc(cs)Interface" @property int myInterfaceInstanceProp; -// CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(py)myInterfaceInstanceProp $ c:objc(cs)Interface" @end @interface Interface (Category) <Protocol> @property(class) int myCategoryTypeProp; -// CHECK-DAG: "!testRelLabel": "memberOf $ c:objc(cs)Interface(cpy)myCategoryTypeProp $ c:objc(cs)Interface" @property int myCategoryInstanceProp; -// CHECK-DAG "!testRelLabel": "memberOf $ c:objc(cs)Interface(py)myCategoryInstanceProp $ c:objc(cs)Interface" @end - // expected-no-diagnostics + +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:objc(cs)Interface(cpy)myInterfaceTypeProp", + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Interface(py)myInterfaceInstanceProp", + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Interface(cpy)myCategoryTypeProp", + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Interface(py)myCategoryInstanceProp", + "target": "c:objc(cs)Interface", + "targetFallback": "Interface" + }, + { + "kind": "conformsTo", + "source": "c:objc(cs)Interface", + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" + }, + { + "kind": "memberOf", + "source": "c:objc(pl)Protocol(cpy)myProtocolTypeProp", + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" + }, + { + "kind": "memberOf", + "source": "c:objc(pl)Protocol(py)myProtocolInstanceProp", + "target": "c:objc(pl)Protocol", + "targetFallback": "Protocol" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Interface" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Interface" + }, + "kind": { + "displayName": "Class", + "identifier": "objective-c.class" + }, + "location": { + "position": { + "character": 11, + "line": 5 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Interface" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Interface" + } + ], + "title": "Interface" + }, + "pathComponents": [ + "Interface" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@property" + }, + { + "kind": "text", + "spelling": " (" + }, + { + "kind": "keyword", + "spelling": "class" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "myInterfaceTypeProp" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Interface(cpy)myInterfaceTypeProp" + }, + "kind": { + "displayName": "Type Property", + "identifier": "objective-c.type.property" + }, + "location": { + "position": { + "character": 21, + "line": 6 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "myInterfaceTypeProp" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "myInterfaceTypeProp" + } + ], + "title": "myInterfaceTypeProp" + }, + "pathComponents": [ + "Interface", + "myInterfaceTypeProp" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@property" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "myInterfaceInstanceProp" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Interface(py)myInterfaceInstanceProp" + }, + "kind": { + "displayName": "Instance Property", + "identifier": "objective-c.property" + }, + "location": { + "position": { + "character": 14, + "line": 7 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "myInterfaceInstanceProp" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "myInterfaceInstanceProp" + } + ], + "title": "myInterfaceInstanceProp" + }, + "pathComponents": [ + "Interface", + "myInterfaceInstanceProp" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@property" + }, + { + "kind": "text", + "spelling": " (" + }, + { + "kind": "keyword", + "spelling": "class" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "myCategoryTypeProp" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Interface(cpy)myCategoryTypeProp" + }, + "kind": { + "displayName": "Type Property", + "identifier": "objective-c.type.property" + }, + "location": { + "position": { + "character": 21, + "line": 11 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "myCategoryTypeProp" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "myCategoryTypeProp" + } + ], + "title": "myCategoryTypeProp" + }, + "pathComponents": [ + "Interface", + "myCategoryTypeProp" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@property" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "myCategoryInstanceProp" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Interface(py)myCategoryInstanceProp" + }, + "kind": { + "displayName": "Instance Property", + "identifier": "objective-c.property" + }, + "location": { + "position": { + "character": 14, + "line": 12 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "myCategoryInstanceProp" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "myCategoryInstanceProp" + } + ], + "title": "myCategoryInstanceProp" + }, + "pathComponents": [ + "Interface", + "myCategoryInstanceProp" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@protocol" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Protocol" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(pl)Protocol" + }, + "kind": { + "displayName": "Protocol", + "identifier": "objective-c.protocol" + }, + "location": { + "position": { + "character": 10, + "line": 0 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Protocol" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Protocol" + } + ], + "title": "Protocol" + }, + "pathComponents": [ + "Protocol" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@property" + }, + { + "kind": "text", + "spelling": " (" + }, + { + "kind": "keyword", + "spelling": "class" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "myProtocolTypeProp" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(pl)Protocol(cpy)myProtocolTypeProp" + }, + "kind": { + "displayName": "Type Property", + "identifier": "objective-c.type.property" + }, + "location": { + "position": { + "character": 21, + "line": 1 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "myProtocolTypeProp" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "myProtocolTypeProp" + } + ], + "title": "myProtocolTypeProp" + }, + "pathComponents": [ + "Protocol", + "myProtocolTypeProp" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@property" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "myProtocolInstanceProp" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(pl)Protocol(py)myProtocolInstanceProp" + }, + "kind": { + "displayName": "Instance Property", + "identifier": "objective-c.property" + }, + "location": { + "position": { + "character": 14, + "line": 2 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "myProtocolInstanceProp" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "myProtocolInstanceProp" + } + ], + "title": "myProtocolInstanceProp" + }, + "pathComponents": [ + "Protocol", + "myProtocolInstanceProp" + ] + } + ] +} diff --git a/clang/test/ExtractAPI/objc_protocol.m b/clang/test/ExtractAPI/objc_protocol.m index 06f7ee3..a04936f 100644 --- a/clang/test/ExtractAPI/objc_protocol.m +++ b/clang/test/ExtractAPI/objc_protocol.m @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang -extract-api --pretty-sgf -x objective-c-header -target arm64-apple-macosx \ +// RUN: %clang -extract-api -x objective-c-header -target arm64-apple-macosx \ // RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/objc_various_categories.m b/clang/test/ExtractAPI/objc_various_categories.m new file mode 100644 index 0000000..adaef5a --- /dev/null +++ b/clang/test/ExtractAPI/objc_various_categories.m @@ -0,0 +1,507 @@ +// RUN: rm -rf %t +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang -extract-api -x objective-c-header \ +// RUN: -target arm64-apple-macosx \ +// RUN: %t/myclass_1.h \ +// RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s + +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +// CHECK-NOT: error: +// CHECK-NOT: warning: + +//--- input.h +#import "myclass_1.h" +#import "Foundation.h" + +@interface MyClass1 (MyCategory1) +- (int) SomeMethod; +@end + +@interface NSString (Category1) +-(void) StringMethod; +@end + +@interface NSString (Category2) +-(void) StringMethod2; +@end + +//--- myclass_1.h +@interface MyClass1 +@end + +//--- Foundation.h +@interface NSString +@end + +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:objc(cs)MyClass1(im)SomeMethod", + "target": "c:objc(cs)MyClass1", + "targetFallback": "MyClass1" + }, + { + "kind": "extensionTo", + "source": "c:objc(cy)NSString@Category1", + "target": "c:objc(cs)NSString", + "targetFallback": "NSString" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)NSString(im)StringMethod", + "target": "c:objc(cy)NSString@Category1", + "targetFallback": "Category1" + }, + { + "kind": "extensionTo", + "source": "c:objc(cy)NSString@Category2", + "target": "c:objc(cs)NSString", + "targetFallback": "NSString" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)NSString(im)StringMethod2", + "target": "c:objc(cy)NSString@Category2", + "targetFallback": "Category2" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "MyClass1" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)MyClass1" + }, + "kind": { + "displayName": "Class", + "identifier": "objective-c.class" + }, + "location": { + "position": { + "character": 11, + "line": 0 + }, + "uri": "file://INPUT_DIR/myclass_1.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyClass1" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "MyClass1" + } + ], + "title": "MyClass1" + }, + "pathComponents": [ + "MyClass1" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "SomeMethod" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)MyClass1(im)SomeMethod" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "SomeMethod" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "SomeMethod" + } + ], + "title": "SomeMethod" + }, + "pathComponents": [ + "MyClass1", + "SomeMethod" + ] + }, + { + "accessLevel": "public", + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cy)NSString@Category1" + }, + "kind": { + "displayName": "Module Extension", + "identifier": "objective-c.module.extension" + } + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:objc(cs)NSString", + "spelling": "NSString" + }, + { + "kind": "text", + "spelling": " (" + }, + { + "kind": "identifier", + "spelling": "Category1" + }, + { + "kind": "text", + "spelling": ")" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cy)NSString@Category1" + }, + "kind": { + "displayName": "Class Extension", + "identifier": "objective-c.class.extension" + }, + "location": { + "position": { + "character": 11, + "line": 7 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Category1" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Category1" + } + ], + "title": "NSString (Category1)" + }, + "pathComponents": [ + "Category1" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "StringMethod" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)NSString(im)StringMethod" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 8 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "StringMethod" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "StringMethod" + } + ], + "title": "StringMethod" + }, + "pathComponents": [ + "Category1", + "StringMethod" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:objc(cs)NSString", + "spelling": "NSString" + }, + { + "kind": "text", + "spelling": " (" + }, + { + "kind": "identifier", + "spelling": "Category2" + }, + { + "kind": "text", + "spelling": ")" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cy)NSString@Category2" + }, + "kind": { + "displayName": "Class Extension", + "identifier": "objective-c.class.extension" + }, + "location": { + "position": { + "character": 11, + "line": 11 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Category2" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Category2" + } + ], + "title": "NSString (Category2)" + }, + "pathComponents": [ + "Category2" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "StringMethod2" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)NSString(im)StringMethod2" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 12 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "StringMethod2" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "StringMethod2" + } + ], + "title": "StringMethod2" + }, + "pathComponents": [ + "Category2", + "StringMethod2" + ] + } + ] +} diff --git a/clang/test/ExtractAPI/operator_overload.cpp b/clang/test/ExtractAPI/operator_overload.cpp index 9430c58..511a5a7 100644 --- a/clang/test/ExtractAPI/operator_overload.cpp +++ b/clang/test/ExtractAPI/operator_overload.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/relative_include.m b/clang/test/ExtractAPI/relative_include.m index e5a0268..46cbdaee 100644 --- a/clang/test/ExtractAPI/relative_include.m +++ b/clang/test/ExtractAPI/relative_include.m @@ -15,7 +15,7 @@ // RUN: %hmaptool write %t/headermap.hmap.json %t/headermap.hmap // Input headers use paths to the framework root/DSTROOT -// RUN: %clang_cc1 -extract-api --pretty-sgf -v --product-name=MyFramework \ +// RUN: %clang_cc1 -extract-api -v --product-name=MyFramework \ // RUN: -triple arm64-apple-macosx \ // RUN: -iquote%t -I%t/headermap.hmap -F%t/Frameworks \ // RUN: -x objective-c-header \ diff --git a/clang/test/ExtractAPI/simple_inheritance.cpp b/clang/test/ExtractAPI/simple_inheritance.cpp index 58c3c4e..5fe99af 100644 --- a/clang/test/ExtractAPI/simple_inheritance.cpp +++ b/clang/test/ExtractAPI/simple_inheritance.cpp @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx \ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ // RUN: -x c++-header %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/struct.c b/clang/test/ExtractAPI/struct.c index 1995a6ae..4284b73 100644 --- a/clang/test/ExtractAPI/struct.c +++ b/clang/test/ExtractAPI/struct.c @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang -extract-api --pretty-sgf -target arm64-apple-macosx \ +// RUN: %clang -extract-api -target arm64-apple-macosx \ // RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/typedef.c b/clang/test/ExtractAPI/typedef.c index a4c3619..c30e655 100644 --- a/clang/test/ExtractAPI/typedef.c +++ b/clang/test/ExtractAPI/typedef.c @@ -1,93 +1,391 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ -// RUN: -triple arm64-apple-macosx -x objective-c-header %s -o %t/output.symbols.json -verify +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang -extract-api --product-name=Typedef -target arm64-apple-macosx \ +// RUN: -x objective-c-header %t/input.h -o %t/output.json | FileCheck -allow-empty %s -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix MYINT +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +// CHECK-NOT: error: +// CHECK-NOT: warning: + +//--- input.h typedef int MyInt; -// MYINT-LABEL: "!testLabel": "c:typedef.c@T@MyInt" -// MYINT: "accessLevel": "public", -// MYINT: "declarationFragments": [ -// MYINT-NEXT: { -// MYINT-NEXT: "kind": "keyword", -// MYINT-NEXT: "spelling": "typedef" -// MYINT-NEXT: }, -// MYINT-NEXT: { -// MYINT-NEXT: "kind": "text", -// MYINT-NEXT: "spelling": " " -// MYINT-NEXT: }, -// MYINT-NEXT: { -// MYINT-NEXT: "kind": "typeIdentifier", -// MYINT-NEXT: "preciseIdentifier": "c:I", -// MYINT-NEXT: "spelling": "int" -// MYINT-NEXT: }, -// MYINT-NEXT: { -// MYINT-NEXT: "kind": "text", -// MYINT-NEXT: "spelling": " " -// MYINT-NEXT: }, -// MYINT-NEXT: { -// MYINT-NEXT: "kind": "identifier", -// MYINT-NEXT: "spelling": "MyInt" -// MYINT-NEXT: }, -// MYINT-NEXT: { -// MYINT-NEXT: "kind": "text", -// MYINT-NEXT: "spelling": ";" -// MYINT-NEXT: } -// MYINT-NEXT: ], -// MYINT: "kind": { -// MYINT-NEXT: "displayName": "Type Alias", -// MYINT-NEXT: "identifier": "objective-c.typealias" -// MYINT-NEXT: }, -// MYINT: "title": "MyInt" -// MYINT: "pathComponents": [ -// MYINT-NEXT: "MyInt" -// MYINT-NEXT: ], -// MYINT: "type": "c:I" -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix BARPTR typedef struct Bar *BarPtr; -// BARPTR-LABEL: "!testLabel": "c:typedef.c@T@BarPtr" -// BARPTR: "accessLevel": "public", -// BARPTR: "declarationFragments": [ -// BARPTR-NEXT: { -// BARPTR-NEXT: "kind": "keyword", -// BARPTR-NEXT: "spelling": "typedef" -// BARPTR-NEXT: }, -// BARPTR-NEXT: { -// BARPTR-NEXT: "kind": "text", -// BARPTR-NEXT: "spelling": " " -// BARPTR-NEXT: }, -// BARPTR-NEXT: { -// BARPTR-NEXT: "kind": "keyword", -// BARPTR-NEXT: "spelling": "struct" -// BARPTR-NEXT: }, -// BARPTR-NEXT: { -// BARPTR-NEXT: "kind": "text", -// BARPTR-NEXT: "spelling": " " -// BARPTR-NEXT: }, -// BARPTR-NEXT: { -// BARPTR-NEXT: "kind": "typeIdentifier", -// BARPTR-NEXT: "preciseIdentifier": "c:@S@Bar", -// BARPTR-NEXT: "spelling": "Bar" -// BARPTR-NEXT: }, -// BARPTR-NEXT: { -// BARPTR-NEXT: "kind": "text", -// BARPTR-NEXT: "spelling": " * " -// BARPTR-NEXT: }, -// BARPTR-NEXT: { -// BARPTR-NEXT: "kind": "identifier", -// BARPTR-NEXT: "spelling": "BarPtr" -// BARPTR-NEXT: }, -// BARPTR-NEXT: { -// BARPTR-NEXT: "kind": "text", -// BARPTR-NEXT: "spelling": ";" -// BARPTR-NEXT: } -// BARPTR-NEXT: ], -// BARPTR: "type": "c:*$@S@Bar" -// RUN: FileCheck %s --input-file %t/output.symbols.json void foo(BarPtr value); void baz(BarPtr *value); -// CHECK-NOT: struct Bar * -// expected-no-diagnostics +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "Typedef", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:input.h@T@BarPtr", + "spelling": "BarPtr" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "value" + }, + { + "kind": "text", + "spelling": ");" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:input.h@T@BarPtr", + "spelling": "BarPtr" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "value" + } + ], + "name": "value" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:@F@foo" + }, + "kind": { + "displayName": "Function", + "identifier": "objective-c.func" + }, + "location": { + "position": { + "character": 5, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "foo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "foo" + } + ], + "title": "foo" + }, + "pathComponents": [ + "foo" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "baz" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:input.h@T@BarPtr", + "spelling": "BarPtr" + }, + { + "kind": "text", + "spelling": " * " + }, + { + "kind": "internalParam", + "spelling": "value" + }, + { + "kind": "text", + "spelling": ");" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:input.h@T@BarPtr", + "spelling": "BarPtr" + }, + { + "kind": "text", + "spelling": " * " + }, + { + "kind": "internalParam", + "spelling": "value" + } + ], + "name": "value" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:@F@baz" + }, + "kind": { + "displayName": "Function", + "identifier": "objective-c.func" + }, + "location": { + "position": { + "character": 5, + "line": 6 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "baz" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "baz" + } + ], + "title": "baz" + }, + "pathComponents": [ + "baz" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "MyInt" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:input.h@T@MyInt" + }, + "kind": { + "displayName": "Type Alias", + "identifier": "objective-c.typealias" + }, + "location": { + "position": { + "character": 12, + "line": 0 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyInt" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "MyInt" + } + ], + "title": "MyInt" + }, + "pathComponents": [ + "MyInt" + ], + "type": "c:I" + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "keyword", + "spelling": "struct" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:@S@Bar", + "spelling": "Bar" + }, + { + "kind": "text", + "spelling": " * " + }, + { + "kind": "identifier", + "spelling": "BarPtr" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:input.h@T@BarPtr" + }, + "kind": { + "displayName": "Type Alias", + "identifier": "objective-c.typealias" + }, + "location": { + "position": { + "character": 20, + "line": 2 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "BarPtr" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "BarPtr" + } + ], + "title": "BarPtr" + }, + "pathComponents": [ + "BarPtr" + ], + "type": "c:*$@S@Bar" + } + ] +} diff --git a/clang/test/ExtractAPI/typedef_anonymous_record.c b/clang/test/ExtractAPI/typedef_anonymous_record.c index 9e00ff7..3e4c3e1 100644 --- a/clang/test/ExtractAPI/typedef_anonymous_record.c +++ b/clang/test/ExtractAPI/typedef_anonymous_record.c @@ -1,158 +1,468 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ -// RUN: --product-name=TypedefChain -triple arm64-apple-macosx -x c-header %s -o %t/typedefchain.symbols.json -verify +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang_cc1 -extract-api --product-name=TypedefChain -triple arm64-apple-macosx \ +// RUN: -x c-header %t/input.h -o %t/output.json -verify -// RUN: FileCheck %s --input-file %t/typedefchain.symbols.json --check-prefix MYSTRUCT -typedef struct { } MyStruct; -// MYSTRUCT-LABEL: "!testLabel": "c:@SA@MyStruct" -// MYSTRUCT: "accessLevel": "public", -// MYSTRUCT: "declarationFragments": [ -// MYSTRUCT-NEXT: { -// MYSTRUCT-NEXT: "kind": "keyword", -// MYSTRUCT-NEXT: "spelling": "typedef" -// MYSTRUCT-NEXT: }, -// MYSTRUCT-NEXT: { -// MYSTRUCT-NEXT: "kind": "text", -// MYSTRUCT-NEXT: "spelling": " " -// MYSTRUCT-NEXT: }, -// MYSTRUCT-NEXT: { -// MYSTRUCT-NEXT: "kind": "keyword", -// MYSTRUCT-NEXT: "spelling": "struct" -// MYSTRUCT-NEXT: }, -// MYSTRUCT-NEXT: { -// MYSTRUCT-NEXT: "kind": "text", -// MYSTRUCT-NEXT: "spelling": " " -// MYSTRUCT-NEXT: }, -// MYSTRUCT-NEXT: { -// MYSTRUCT-NEXT: "kind": "identifier", -// MYSTRUCT-NEXT: "spelling": "MyStruct" -// MYSTRUCT-NEXT: }, -// MYSTRUCT-NEXT: { -// MYSTRUCT-NEXT: "kind": "text", -// MYSTRUCT-NEXT: "spelling": ";" -// MYSTRUCT-NEXT: } -// MYSTRUCT-NEXT: ] -// MYSTRUCT: "kind": { -// MYSTRUCT-NEXT: "displayName": "Structure", -// MYSTRUCT-NEXT: "identifier": "c.struct" -// MYSTRUCT: "title": "MyStruct" -// MYSTRUCT: "pathComponents": [ -// MYSTRUCT-NEXT: "MyStruct" -// MYSTRUCT-NEXT: ] +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json -// RUN: FileCheck %s --input-file %t/typedefchain.symbols.json --check-prefix MYSTRUCTSTRUCT +//--- input.h +typedef struct { } MyStruct; typedef MyStruct MyStructStruct; -// MYSTRUCTSTRUCT-LABEL: "!testLabel": "c:typedef_anonymous_record.c@T@MyStructStruct" -// MYSTRUCTSTRUCT: "accessLevel": "public", -// MYSTRUCTSTRUCT: "declarationFragments": [ -// MYSTRUCTSTRUCT-NEXT: { -// MYSTRUCTSTRUCT-NEXT: "kind": "keyword", -// MYSTRUCTSTRUCT-NEXT: "spelling": "typedef" -// MYSTRUCTSTRUCT-NEXT: }, -// MYSTRUCTSTRUCT-NEXT: { -// MYSTRUCTSTRUCT-NEXT: "kind": "text", -// MYSTRUCTSTRUCT-NEXT: "spelling": " " -// MYSTRUCTSTRUCT-NEXT: }, -// MYSTRUCTSTRUCT-NEXT: { -// MYSTRUCTSTRUCT-NEXT: "kind": "typeIdentifier", -// MYSTRUCTSTRUCT-NEXT: "preciseIdentifier": "c:@SA@MyStruct", -// MYSTRUCTSTRUCT-NEXT: "spelling": "MyStruct" -// MYSTRUCTSTRUCT-NEXT: }, -// MYSTRUCTSTRUCT-NEXT: { -// MYSTRUCTSTRUCT-NEXT: "kind": "text", -// MYSTRUCTSTRUCT-NEXT: "spelling": " " -// MYSTRUCTSTRUCT-NEXT: }, -// MYSTRUCTSTRUCT-NEXT: { -// MYSTRUCTSTRUCT-NEXT: "kind": "identifier", -// MYSTRUCTSTRUCT-NEXT: "spelling": "MyStructStruct" -// MYSTRUCTSTRUCT-NEXT: }, -// MYSTRUCTSTRUCT-NEXT: { -// MYSTRUCTSTRUCT-NEXT: "kind": "text", -// MYSTRUCTSTRUCT-NEXT: "spelling": ";" -// MYSTRUCTSTRUCT-NEXT: } -// MYSTRUCTSTRUCT-NEXT:], -// MYSTRUCTSTRUCT: "kind": { -// MYSTRUCTSTRUCT-NEXT: "displayName": "Type Alias", -// MYSTRUCTSTRUCT-NEXT: "identifier": "c.typealias" - -// RUN: FileCheck %s --input-file %t/typedefchain.symbols.json --check-prefix MYENUM -// RUN: FileCheck %s --input-file %t/typedefchain.symbols.json --check-prefix CASE +typedef MyStructStruct MyStructStructStruct; typedef enum { Case } MyEnum; -// MYENUM: "source": "c:@EA@MyEnum@Case", -// MYENUM-NEXT: "target": "c:@EA@MyEnum", -// MYENUM-NEXT: "targetFallback": "MyEnum" -// MYENUM-LABEL: "!testLabel": "c:@EA@MyEnum" -// MYENUM: "declarationFragments": [ -// MYENUM-NEXT: { -// MYENUM-NEXT: "kind": "keyword", -// MYENUM-NEXT: "spelling": "typedef" -// MYENUM-NEXT: }, -// MYENUM-NEXT: { -// MYENUM-NEXT: "kind": "text", -// MYENUM-NEXT: "spelling": " " -// MYENUM-NEXT: }, -// MYENUM-NEXT: { -// MYENUM-NEXT: "kind": "keyword", -// MYENUM-NEXT: "spelling": "enum" -// MYENUM-NEXT: }, -// MYENUM-NEXT: { -// MYENUM-NEXT: "kind": "text", -// MYENUM-NEXT: "spelling": " " -// MYENUM-NEXT: }, -// MYENUM-NEXT: { -// MYENUM-NEXT: "kind": "identifier", -// MYENUM-NEXT: "spelling": "MyEnum" -// MYENUM-NEXT: }, -// MYENUM-NEXT: { -// MYENUM-NEXT: "kind": "text", -// MYENUM-NEXT: "spelling": ";" -// MYENUM-NEXT: } -// MYENUM-NEXT:], -// MYENUM: "kind": { -// MYENUM-NEXT: "displayName": "Enumeration", -// MYENUM-NEXT: "identifier": "c.enum" -// MYENUM: "title": "MyEnum" - -// CASE-LABEL: "!testLabel": "c:@EA@MyEnum@Case" -// CASE: "pathComponents": [ -// CASE-NEXT: "MyEnum", -// CASE-NEXT: "Case" -// CASE-NEXT: ] - -// RUN: FileCheck %s --input-file %t/typedefchain.symbols.json --check-prefix MYENUMENUM typedef MyEnum MyEnumEnum; -// MYENUMENUM-LABEL: "!testLabel": "c:typedef_anonymous_record.c@T@MyEnumEnum" -// MYENUMENUM: "declarationFragments": [ -// MYENUMENUM-NEXT: { -// MYENUMENUM-NEXT: "kind": "keyword", -// MYENUMENUM-NEXT: "spelling": "typedef" -// MYENUMENUM-NEXT: }, -// MYENUMENUM-NEXT: { -// MYENUMENUM-NEXT: "kind": "text", -// MYENUMENUM-NEXT: "spelling": " " -// MYENUMENUM-NEXT: }, -// MYENUMENUM-NEXT: { -// MYENUMENUM-NEXT: "kind": "typeIdentifier", -// MYENUMENUM-NEXT: "preciseIdentifier": "c:@EA@MyEnum", -// MYENUMENUM-NEXT: "spelling": "MyEnum" -// MYENUMENUM-NEXT: }, -// MYENUMENUM-NEXT: { -// MYENUMENUM-NEXT: "kind": "text", -// MYENUMENUM-NEXT: "spelling": " " -// MYENUMENUM-NEXT: }, -// MYENUMENUM-NEXT: { -// MYENUMENUM-NEXT: "kind": "identifier", -// MYENUMENUM-NEXT: "spelling": "MyEnumEnum" -// MYENUMENUM-NEXT: }, -// MYENUMENUM-NEXT: { -// MYENUMENUM-NEXT: "kind": "text", -// MYENUMENUM-NEXT: "spelling": ";" -// MYENUMENUM-NEXT: } -// MYENUMENUM-NEXT: ], -// MYENUMENUM: "kind": { -// MYENUMENUM-NEXT: "displayName": "Type Alias", -// MYENUMENUM-NEXT: "identifier": "c.typealias" -// MYENUMENUM-NEXT: }, -// MYENUMENUM: "title": "MyEnumEnum" - +typedef MyEnumEnum MyEnumEnumEnum; // expected-no-diagnostics + +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "TypedefChain", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:@EA@MyEnum@Case", + "target": "c:@EA@MyEnum", + "targetFallback": "MyEnum" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "keyword", + "spelling": "enum" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "MyEnum" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@EA@MyEnum" + }, + "kind": { + "displayName": "Enumeration", + "identifier": "c.enum" + }, + "location": { + "position": { + "character": 8, + "line": 3 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyEnum" + } + ], + "title": "MyEnum" + }, + "pathComponents": [ + "MyEnum" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "identifier", + "spelling": "Case" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@EA@MyEnum@Case" + }, + "kind": { + "displayName": "Enumeration Case", + "identifier": "c.enum.case" + }, + "location": { + "position": { + "character": 15, + "line": 3 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Case" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Case" + } + ], + "title": "Case" + }, + "pathComponents": [ + "MyEnum", + "Case" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "keyword", + "spelling": "struct" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "MyStruct" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@SA@MyStruct" + }, + "kind": { + "displayName": "Structure", + "identifier": "c.struct" + }, + "location": { + "position": { + "character": 8, + "line": 0 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyStruct" + } + ], + "title": "MyStruct" + }, + "pathComponents": [ + "MyStruct" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:@SA@MyStruct", + "spelling": "MyStruct" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "MyStructStruct" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:input.h@T@MyStructStruct" + }, + "kind": { + "displayName": "Type Alias", + "identifier": "c.typealias" + }, + "location": { + "position": { + "character": 17, + "line": 1 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyStructStruct" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "MyStructStruct" + } + ], + "title": "MyStructStruct" + }, + "pathComponents": [ + "MyStructStruct" + ], + "type": "c:@SA@MyStruct" + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:input.h@T@MyStructStruct", + "spelling": "MyStructStruct" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "MyStructStructStruct" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:input.h@T@MyStructStructStruct" + }, + "kind": { + "displayName": "Type Alias", + "identifier": "c.typealias" + }, + "location": { + "position": { + "character": 23, + "line": 2 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyStructStructStruct" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "MyStructStructStruct" + } + ], + "title": "MyStructStructStruct" + }, + "pathComponents": [ + "MyStructStructStruct" + ], + "type": "c:input.h@T@MyStructStruct" + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:@EA@MyEnum", + "spelling": "MyEnum" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "MyEnumEnum" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:input.h@T@MyEnumEnum" + }, + "kind": { + "displayName": "Type Alias", + "identifier": "c.typealias" + }, + "location": { + "position": { + "character": 15, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyEnumEnum" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "MyEnumEnum" + } + ], + "title": "MyEnumEnum" + }, + "pathComponents": [ + "MyEnumEnum" + ], + "type": "c:@EA@MyEnum" + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:input.h@T@MyEnumEnum", + "spelling": "MyEnumEnum" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "MyEnumEnumEnum" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:input.h@T@MyEnumEnumEnum" + }, + "kind": { + "displayName": "Type Alias", + "identifier": "c.typealias" + }, + "location": { + "position": { + "character": 19, + "line": 5 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "MyEnumEnumEnum" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "MyEnumEnumEnum" + } + ], + "title": "MyEnumEnumEnum" + }, + "pathComponents": [ + "MyEnumEnumEnum" + ], + "type": "c:input.h@T@MyEnumEnum" + } + ] +} diff --git a/clang/test/ExtractAPI/typedef_chain.c b/clang/test/ExtractAPI/typedef_chain.c index 05d4eb5..9e6151c 100644 --- a/clang/test/ExtractAPI/typedef_chain.c +++ b/clang/test/ExtractAPI/typedef_chain.c @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang -extract-api --pretty-sgf --product-name=TypedefChain -target arm64-apple-macosx \ +// RUN: %clang -extract-api --product-name=TypedefChain -target arm64-apple-macosx \ // RUN: -x objective-c-header %t/input.h -o %t/output.json | FileCheck -allow-empty %s // Generator version is not consistent across test runs, normalize it. diff --git a/clang/test/ExtractAPI/typedef_struct_enum.c b/clang/test/ExtractAPI/typedef_struct_enum.c index fb6fbe9..15357d5 100644 --- a/clang/test/ExtractAPI/typedef_struct_enum.c +++ b/clang/test/ExtractAPI/typedef_struct_enum.c @@ -1,146 +1,445 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \ -// RUN: -x c-header %s -triple arm64-apple-macos -o %t/output.symbols.json -verify +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang -extract-api -target arm64-apple-macosx \ +// RUN: %t/input.h -o %t/output.json | FileCheck -allow-empty %s -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix TEST +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +// CHECK-NOT: error: +// CHECK-NOT: warning: + +//--- input.h typedef struct Test { } Test; -// TEST-LABEL: "!testLabel": "c:@S@Test" -// TEST: "declarationFragments": [ -// TEST-NEXT: { -// TEST-NEXT: "kind": "keyword", -// TEST-NEXT: "spelling": "typedef" -// TEST-NEXT: }, -// TEST-NEXT: { -// TEST-NEXT: "kind": "text", -// TEST-NEXT: "spelling": " " -// TEST-NEXT: }, -// TEST-NEXT: { -// TEST-NEXT: "kind": "keyword", -// TEST-NEXT: "spelling": "struct" -// TEST-NEXT: }, -// TEST-NEXT: { -// TEST-NEXT: "kind": "text", -// TEST-NEXT: "spelling": " " -// TEST-NEXT: }, -// TEST-NEXT: { -// TEST-NEXT: "kind": "identifier", -// TEST-NEXT: "spelling": "Test" -// TEST-NEXT: }, -// TEST-NEXT: { -// TEST-NEXT: "kind": "text", -// TEST-NEXT: "spelling": " { ... } " -// TEST-NEXT: }, -// TEST-NEXT: { -// TEST-NEXT: "kind": "identifier", -// TEST-NEXT: "spelling": "Test" -// TEST-NEXT: }, -// TEST-NEXT: { -// TEST-NEXT: "kind": "text", -// TEST-NEXT: "spelling": ";" -// TEST-NEXT: } -// TEST-NEXT: ], -// TEST: "displayName": "Structure", -// TEST: "title": "Test" -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix TEST2 typedef enum Test2 { simple } Test2; -// TEST2-LABEL: "!testLabel": "c:@E@Test2" -// TEST2: "declarationFragments": [ -// TEST2-NEXT: { -// TEST2-NEXT: "kind": "keyword", -// TEST2-NEXT: "spelling": "typedef" -// TEST2-NEXT: }, -// TEST2-NEXT: { -// TEST2-NEXT: "kind": "text", -// TEST2-NEXT: "spelling": " " -// TEST2-NEXT: }, -// TEST2-NEXT: { -// TEST2-NEXT: "kind": "keyword", -// TEST2-NEXT: "spelling": "enum" -// TEST2-NEXT: }, -// TEST2-NEXT: { -// TEST2-NEXT: "kind": "text", -// TEST2-NEXT: "spelling": " " -// TEST2-NEXT: }, -// TEST2-NEXT: { -// TEST2-NEXT: "kind": "identifier", -// TEST2-NEXT: "spelling": "Test2" -// TEST2-NEXT: }, -// TEST2-NEXT: { -// TEST2-NEXT: "kind": "text", -// TEST2-NEXT: "spelling": ": " -// TEST2-NEXT: }, -// TEST2-NEXT: { -// TEST2-NEXT: "kind": "typeIdentifier", -// TEST2-NEXT: "preciseIdentifier": "c:i", -// TEST2-NEXT: "spelling": "unsigned int" -// TEST2-NEXT: }, -// TEST2-NEXT: { -// TEST2-NEXT: "kind": "text", -// TEST2-NEXT: "spelling": " { ... } " -// TEST2-NEXT: }, -// TEST2-NEXT: { -// TEST2-NEXT: "kind": "identifier", -// TEST2-NEXT: "spelling": "Test2" -// TEST2-NEXT: }, -// TEST2-NEXT: { -// TEST2-NEXT: "kind": "text", -// TEST2-NEXT: "spelling": ";" -// TEST2-NEXT: } -// TEST2-NEXT: ], -// TEST2: "displayName": "Enumeration", -// TEST2: "title": "Test2" - struct Foo; - -// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix TYPEDEF typedef struct Foo TypedefedFoo; -// TYPEDEF-LABEL: "!testLabel": "c:typedef_struct_enum.c@T@TypedefedFoo" -// TYPEDEF: "declarationFragments": [ -// TYPEDEF-NEXT: { -// TYPEDEF-NEXT: "kind": "keyword", -// TYPEDEF-NEXT: "spelling": "typedef" -// TYPEDEF-NEXT: }, -// TYPEDEF-NEXT: { -// TYPEDEF-NEXT: "kind": "text", -// TYPEDEF-NEXT: "spelling": " " -// TYPEDEF-NEXT: }, -// TYPEDEF-NEXT: { -// TYPEDEF-NEXT: "kind": "keyword", -// TYPEDEF-NEXT: "spelling": "struct" -// TYPEDEF-NEXT: }, -// TYPEDEF-NEXT: { -// TYPEDEF-NEXT: "kind": "text", -// TYPEDEF-NEXT: "spelling": " " -// TYPEDEF-NEXT: }, -// TYPEDEF-NEXT: { -// TYPEDEF-NEXT: "kind": "typeIdentifier", -// TYPEDEF-NEXT: "preciseIdentifier": "c:@S@Foo", -// TYPEDEF-NEXT: "spelling": "Foo" -// TYPEDEF-NEXT: }, -// TYPEDEF-NEXT: { -// TYPEDEF-NEXT: "kind": "text", -// TYPEDEF-NEXT: "spelling": " " -// TYPEDEF-NEXT: }, -// TYPEDEF-NEXT: { -// TYPEDEF-NEXT: "kind": "identifier", -// TYPEDEF-NEXT: "spelling": "TypedefedFoo" -// TYPEDEF-NEXT: }, -// TYPEDEF-NEXT: { -// TYPEDEF-NEXT: "kind": "text", -// TYPEDEF-NEXT: "spelling": ";" -// TYPEDEF-NEXT: } -// TYPEDEF-NEXT: ], -// TYPEDEF: "displayName": "Type Alias", -// TYPEDEF: "title": "TypedefedFoo" -// TYPEDEF: "type": "c:@S@Foo" - struct Foo { int bar; }; -// expected-no-diagnostics +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:@E@Test2@simple", + "target": "c:@E@Test2", + "targetFallback": "Test2" + }, + { + "kind": "memberOf", + "source": "c:@S@Foo@FI@bar", + "target": "c:@S@Foo", + "targetFallback": "Foo" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "keyword", + "spelling": "enum" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Test2" + }, + { + "kind": "text", + "spelling": ": " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": " { ... } " + }, + { + "kind": "identifier", + "spelling": "Test2" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@E@Test2" + }, + "kind": { + "displayName": "Enumeration", + "identifier": "c.enum" + }, + "location": { + "position": { + "character": 13, + "line": 3 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Test2" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Test2" + } + ], + "title": "Test2" + }, + "pathComponents": [ + "Test2" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "identifier", + "spelling": "simple" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@E@Test2@simple" + }, + "kind": { + "displayName": "Enumeration Case", + "identifier": "c.enum.case" + }, + "location": { + "position": { + "character": 2, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "simple" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "simple" + } + ], + "title": "simple" + }, + "pathComponents": [ + "Test2", + "simple" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "keyword", + "spelling": "struct" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Test" + }, + { + "kind": "text", + "spelling": " { ... } " + }, + { + "kind": "identifier", + "spelling": "Test" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@S@Test" + }, + "kind": { + "displayName": "Structure", + "identifier": "c.struct" + }, + "location": { + "position": { + "character": 15, + "line": 0 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Test" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Test" + } + ], + "title": "Test" + }, + "pathComponents": [ + "Test" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "struct" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Foo" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@S@Foo" + }, + "kind": { + "displayName": "Structure", + "identifier": "c.struct" + }, + "location": { + "position": { + "character": 7, + "line": 9 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "title": "Foo" + }, + "pathComponents": [ + "Foo" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "bar" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@S@Foo@FI@bar" + }, + "kind": { + "displayName": "Instance Property", + "identifier": "c.property" + }, + "location": { + "position": { + "character": 8, + "line": 10 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "bar" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "bar" + } + ], + "title": "bar" + }, + "pathComponents": [ + "Foo", + "bar" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "keyword", + "spelling": "struct" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:@S@Foo", + "spelling": "Foo" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "TypedefedFoo" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:input.h@T@TypedefedFoo" + }, + "kind": { + "displayName": "Type Alias", + "identifier": "c.typealias" + }, + "location": { + "position": { + "character": 19, + "line": 8 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "TypedefedFoo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "TypedefedFoo" + } + ], + "title": "TypedefedFoo" + }, + "pathComponents": [ + "TypedefedFoo" + ], + "type": "c:@S@Foo" + } + ] +} diff --git a/clang/test/ExtractAPI/underscored.c b/clang/test/ExtractAPI/underscored.c index 204ec36..30d2b63 100644 --- a/clang/test/ExtractAPI/underscored.c +++ b/clang/test/ExtractAPI/underscored.c @@ -1,5 +1,17 @@ +// RUN: rm -rf %t +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json // RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ -// RUN: -x c-header %s -o - -verify | FileCheck %s +// RUN: -x c-header %t/input.h -o %t/output.json -verify + +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +//--- input.h +// expected-no-diagnostics // Global record int _HiddenGlobal; @@ -7,22 +19,399 @@ int exposed_global; // Record type struct _HiddenRecord { - int HiddenRecordMember; + int a; }; struct ExposedRecord { - int ExposedRecordMember; + int a; }; +// Typedef +typedef struct {} _HiddenTypedef; +typedef int ExposedTypedef; +typedef _HiddenTypedef ExposedTypedefToHidden; + // Macros #define _HIDDEN_MACRO 5 #define EXPOSED_MACRO 5 -// expected-no-diagnostics - -// CHECK-NOT: _HiddenRecord -// CHECK-NOT: HiddenRecordMember -// CHECK: ExposedRecord -// CHECK: ExposedRecordMember -// CHECK-NOT: _HIDDEN_MACRO -// CHECK: EXPOSED_MACRO +// Symbols that start with '_' should not appear in the reference output +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:@S@ExposedRecord@FI@a", + "target": "c:@S@ExposedRecord", + "targetFallback": "ExposedRecord" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "exposed_global" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@exposed_global" + }, + "kind": { + "displayName": "Global Variable", + "identifier": "c.var" + }, + "location": { + "position": { + "character": 4, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "exposed_global" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "exposed_global" + } + ], + "title": "exposed_global" + }, + "pathComponents": [ + "exposed_global" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "struct" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "ExposedRecord" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@S@ExposedRecord" + }, + "kind": { + "displayName": "Structure", + "identifier": "c.struct" + }, + "location": { + "position": { + "character": 7, + "line": 11 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "ExposedRecord" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "ExposedRecord" + } + ], + "title": "ExposedRecord" + }, + "pathComponents": [ + "ExposedRecord" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "a" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@S@ExposedRecord@FI@a" + }, + "kind": { + "displayName": "Instance Property", + "identifier": "c.property" + }, + "location": { + "position": { + "character": 6, + "line": 12 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "a" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "a" + } + ], + "title": "a" + }, + "pathComponents": [ + "ExposedRecord", + "a" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "#define" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "EXPOSED_MACRO" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:input.h@335@macro@EXPOSED_MACRO" + }, + "kind": { + "displayName": "Macro", + "identifier": "c.macro" + }, + "location": { + "position": { + "character": 8, + "line": 22 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "EXPOSED_MACRO" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "EXPOSED_MACRO" + } + ], + "title": "EXPOSED_MACRO" + }, + "pathComponents": [ + "EXPOSED_MACRO" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "ExposedTypedef" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:input.h@T@ExposedTypedef" + }, + "kind": { + "displayName": "Type Alias", + "identifier": "c.typealias" + }, + "location": { + "position": { + "character": 12, + "line": 17 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "ExposedTypedef" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "ExposedTypedef" + } + ], + "title": "ExposedTypedef" + }, + "pathComponents": [ + "ExposedTypedef" + ], + "type": "c:I" + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "typedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:@SA@_HiddenTypedef", + "spelling": "_HiddenTypedef" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "ExposedTypedefToHidden" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:input.h@T@ExposedTypedefToHidden" + }, + "kind": { + "displayName": "Type Alias", + "identifier": "c.typealias" + }, + "location": { + "position": { + "character": 23, + "line": 18 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "ExposedTypedefToHidden" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "ExposedTypedefToHidden" + } + ], + "title": "ExposedTypedefToHidden" + }, + "pathComponents": [ + "ExposedTypedefToHidden" + ], + "type": "c:@SA@_HiddenTypedef" + } + ] +} diff --git a/clang/test/ExtractAPI/union.c b/clang/test/ExtractAPI/union.c index 8f8300b..6ec9fd3 100644 --- a/clang/test/ExtractAPI/union.c +++ b/clang/test/ExtractAPI/union.c @@ -2,7 +2,7 @@ // RUN: split-file %s %t // RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ // RUN: %t/reference.output.json.in >> %t/reference.output.json -// RUN: %clang_cc1 -extract-api --pretty-sgf -triple arm64-apple-macosx -x c-header\ +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx -x c-header\ // RUN: %t/input.h -o %t/output.json -verify // Generator version is not consistent across test runs, normalize it. @@ -12,7 +12,7 @@ //--- input.h /// My Union -union Union { +union Union{ /// the a option int a; /// the b option diff --git a/clang/test/ExtractAPI/vfs_redirected_include.m b/clang/test/ExtractAPI/vfs_redirected_include.m index db03820..9ba7e1d 100644 --- a/clang/test/ExtractAPI/vfs_redirected_include.m +++ b/clang/test/ExtractAPI/vfs_redirected_include.m @@ -14,7 +14,7 @@ // RUN: %t/vfsoverlay.yaml.in >> %t/vfsoverlay.yaml // Input headers use paths to the framework root/DSTROOT -// RUN: %clang_cc1 -extract-api --pretty-sgf -v --product-name=MyFramework \ +// RUN: %clang_cc1 -extract-api -v --product-name=MyFramework \ // RUN: -triple arm64-apple-macosx \ // RUN: -iquote%t -ivfsoverlay %t/vfsoverlay.yaml -F%t/Frameworks \ // RUN: -x objective-c-header \ diff --git a/clang/test/Index/extract-api-cursor.m b/clang/test/Index/extract-api-cursor.m index 9d9d3a1..1b27b6f 100644 --- a/clang/test/Index/extract-api-cursor.m +++ b/clang/test/Index/extract-api-cursor.m @@ -31,8 +31,6 @@ struct Foo { - (void)derivedMethodWithValue:(id<Protocol>)value { int a = 5; } -/// Impl only docs -- (void)implOnlyMethod { } @end // RUN: c-index-test -single-symbol-sgf-at=%s:4:9 local %s | FileCheck -check-prefix=CHECK-FOO %s @@ -120,10 +118,3 @@ struct Foo { // CHECK-DERIVED-METHOD-IMPL: "text":"Derived method docs" // CHECK-DERIVED-METHOD-IMPL: "kind":{"displayName":"Instance Method","identifier":"objective-c.method"} // CHECK-DERIVED-METHOD-IMPL: "title":"derivedMethodWithValue:" - -// RUN: c-index-test -single-symbol-sgf-at=%s:35:11 local %s | FileCheck -check-prefix=CHECK-IMPL-ONLY %s -// CHECK-IMPL-ONLY: "relatedSymbols":[] -// CHECK-IMPL-ONLY: "relationships":[{"kind":"memberOf","source":"c:objc(cs)Derived(im)implOnlyMethod","target":"c:objc(cs)Derived" -// CHECK-IMPL-ONLY: "text":"Impl only docs" -// CHECK-IMPL-ONLY: "kind":{"displayName":"Instance Method","identifier":"objective-c.method"} -// CHECK-IMPL-ONLY: "title":"implOnlyMethod" |