Skip to content

Commit 0e8d869

Browse files
author
Nathan Hawes
authored
Merge pull request #10959 from nathawes/rdar33249361-update-interface-gen-to-accept-swift-compiler-args-4.0-07-11-2017
[4.0-07-11-2017][interface-gen] Update interface gen for header files to accept Swift compiler args
2 parents b9ff47f + 5810159 commit 0e8d869

File tree

13 files changed

+373
-749
lines changed

13 files changed

+373
-749
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// REQUIRES: objc_interop
2+
// RUN: %sourcekitd-test -req=interface-gen -using-swift-args -header %S/Inputs/header.h -- %s -enable-objc-interop -import-objc-header %S/Inputs/header.h > %t.response
3+
// RUN: diff -u %S/gen_header.swift.response %t.response
4+
5+
doSomethingInHead(1)

tools/SourceKit/include/SourceKit/Core/LangSupport.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,7 @@ class LangSupport {
445445
StringRef Name,
446446
StringRef HeaderName,
447447
ArrayRef<const char *> Args,
448+
bool UsingSwiftArgs,
448449
bool SynthesizedExtensions,
449450
Optional<unsigned> swiftVersion) = 0;
450451

Lines changed: 295 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,295 @@
1+
#ifndef KEY
2+
#define KEY(NAME, CONTENT)
3+
#endif
4+
5+
#ifndef REQUEST
6+
#define REQUEST(NAME, CONTENT)
7+
#endif
8+
9+
#ifndef KIND
10+
#define KIND(NAME, CONTENT)
11+
#endif
12+
13+
KEY(VersionMajor, "key.version_major")
14+
KEY(VersionMinor, "key.version_minor")
15+
KEY(Results, "key.results")
16+
KEY(Request, "key.request")
17+
KEY(Notification, "key.notification")
18+
KEY(Kind, "key.kind")
19+
KEY(Accessibility, "key.accessibility")
20+
KEY(SetterAccessibility, "key.setter_accessibility")
21+
KEY(Keyword, "key.keyword")
22+
KEY(Name, "key.name")
23+
KEY(USR, "key.usr")
24+
KEY(OriginalUSR, "key.original_usr")
25+
KEY(DefaultImplementationOf, "key.default_implementation_of")
26+
KEY(InterestedUSR, "key.interested_usr")
27+
KEY(GenericParams, "key.generic_params")
28+
KEY(GenericRequirements, "key.generic_requirements")
29+
KEY(DocFullAsXML, "key.doc.full_as_xml")
30+
KEY(Line, "key.line")
31+
KEY(Column, "key.column")
32+
KEY(ReceiverUSR, "key.receiver_usr")
33+
KEY(IsDynamic, "key.is_dynamic")
34+
KEY(FilePath, "key.filepath")
35+
KEY(ModuleInterfaceName, "key.module_interface_name")
36+
KEY(Hash, "key.hash")
37+
KEY(CompilerArgs, "key.compilerargs")
38+
KEY(Severity, "key.severity")
39+
KEY(Offset, "key.offset")
40+
KEY(Length, "key.length")
41+
KEY(SourceFile, "key.sourcefile")
42+
KEY(SourceText, "key.sourcetext")
43+
KEY(EnableSyntaxMap, "key.enablesyntaxmap")
44+
KEY(EnableStructure, "key.enablesubstructure")
45+
KEY(Description, "key.description")
46+
KEY(TypeName, "key.typename")
47+
KEY(RuntimeName, "key.runtime_name")
48+
KEY(SelectorName, "key.selector_name")
49+
KEY(AnnotatedDecl, "key.annotated_decl")
50+
KEY(FullyAnnotatedDecl, "key.fully_annotated_decl")
51+
KEY(DocBrief, "key.doc.brief")
52+
KEY(Context, "key.context")
53+
KEY(ModuleImportDepth, "key.moduleimportdepth")
54+
KEY(NumBytesToErase, "key.num_bytes_to_erase")
55+
KEY(NotRecommended, "key.not_recommended")
56+
KEY(Annotations, "key.annotations")
57+
KEY(DiagnosticStage, "key.diagnostic_stage")
58+
KEY(SyntaxMap, "key.syntaxmap")
59+
KEY(IsSystem, "key.is_system")
60+
KEY(Related, "key.related")
61+
KEY(Inherits, "key.inherits")
62+
KEY(Conforms, "key.conforms")
63+
KEY(Extends, "key.extends")
64+
KEY(Dependencies, "key.dependencies")
65+
KEY(Entities, "key.entities")
66+
KEY(NameOffset, "key.nameoffset")
67+
KEY(NameLength, "key.namelength")
68+
KEY(BodyOffset, "key.bodyoffset")
69+
KEY(BodyLength, "key.bodylength")
70+
KEY(ThrowOffset, "key.throwoffset")
71+
KEY(ThrowLength, "key.throwlength")
72+
KEY(IsLocal, "key.is_local")
73+
KEY(InheritedTypes, "key.inheritedtypes")
74+
KEY(Attributes, "key.attributes")
75+
KEY(Attribute, "key.attribute")
76+
KEY(Elements, "key.elements")
77+
KEY(SubStructure, "key.substructure")
78+
KEY(Ranges, "key.ranges")
79+
KEY(Fixits, "key.fixits")
80+
KEY(Diagnostics, "key.diagnostics")
81+
KEY(FormatOptions, "key.editor.format.options")
82+
KEY(CodeCompleteOptions, "key.codecomplete.options")
83+
KEY(FilterRules, "key.codecomplete.filterrules")
84+
KEY(NextRequestStart, "key.nextrequeststart")
85+
KEY(Popular, "key.popular")
86+
KEY(Unpopular, "key.unpopular")
87+
KEY(Hide, "key.hide")
88+
KEY(Platform, "key.platform")
89+
KEY(IsDeprecated, "key.is_deprecated")
90+
KEY(IsUnavailable, "key.is_unavailable")
91+
KEY(IsOptional, "key.is_optional")
92+
KEY(Message, "key.message")
93+
KEY(Introduced, "key.introduced")
94+
KEY(Deprecated, "key.deprecated")
95+
KEY(Obsoleted, "key.obsoleted")
96+
KEY(RemoveCache, "key.removecache")
97+
KEY(TypeInterface, "key.typeinterface")
98+
KEY(TypeUsr, "key.typeusr")
99+
KEY(ContainerTypeUsr, "key.containertypeusr")
100+
KEY(ModuleGroups, "key.modulegroups")
101+
KEY(BaseName, "key.basename")
102+
KEY(ArgNames, "key.argnames")
103+
KEY(SelectorPieces, "key.selectorpieces")
104+
KEY(NameKind, "key.namekind")
105+
KEY(LocalizationKey, "key.localization_key")
106+
KEY(IsZeroArgSelector, "key.is_zero_arg_selector")
107+
KEY(SwiftVersion, "key.swift_version")
108+
109+
KEY(EnableDiagnostics, "key.enablediagnostics")
110+
KEY(GroupName, "key.groupname")
111+
KEY(ActionName, "key.actionname")
112+
KEY(SynthesizedExtension, "key.synthesizedextensions")
113+
KEY(UsingSwiftArgs, "key.usingswiftargs")
114+
115+
KEY(Names, "key.names")
116+
KEY(UIDs, "key.uids")
117+
KEY(SyntacticOnly, "key.syntactic_only")
118+
KEY(Actionable, "key.actionable")
119+
KEY(ParentLoc, "key.parent_loc")
120+
KEY(IsTestCandidate, "key.is_test_candidate")
121+
KEY(Overrides, "key.overrides")
122+
KEY(AssociatedUSRs, "key.associated_usrs")
123+
KEY(ModuleName, "key.modulename")
124+
KEY(RelatedDecls, "key.related_decls")
125+
KEY(Simplified, "key.simplified")
126+
KEY(RangeContent, "key.rangecontent")
127+
KEY(CancelOnSubsequentRequest, "key.cancel_on_subsequent_request")
128+
129+
REQUEST(ProtocolVersion, "source.request.protocol_version")
130+
REQUEST(CrashWithExit, "source.request.crash_exit")
131+
REQUEST(Demangle, "source.request.demangle")
132+
REQUEST(MangleSimpleClass, "source.request.mangle_simple_class")
133+
REQUEST(Index, "source.request.indexsource")
134+
REQUEST(DocInfo, "source.request.docinfo")
135+
REQUEST(CodeComplete, "source.request.codecomplete")
136+
REQUEST(CodeCompleteOpen, "source.request.codecomplete.open")
137+
REQUEST(CodeCompleteClose, "source.request.codecomplete.close")
138+
REQUEST(CodeCompleteUpdate, "source.request.codecomplete.update")
139+
REQUEST(CodeCompleteCacheOnDisk, "source.request.codecomplete.cache.ondisk")
140+
REQUEST(CodeCompleteSetPopularAPI, "source.request.codecomplete.setpopularapi")
141+
REQUEST(CodeCompleteSetCustom, "source.request.codecomplete.setcustom")
142+
REQUEST(CursorInfo, "source.request.cursorinfo")
143+
REQUEST(RangeInfo, "source.request.rangeinfo")
144+
REQUEST(RelatedIdents, "source.request.relatedidents")
145+
REQUEST(EditorOpen, "source.request.editor.open")
146+
REQUEST(EditorOpenInterface, "source.request.editor.open.interface")
147+
REQUEST(EditorOpenHeaderInterface, "source.request.editor.open.interface.header")
148+
REQUEST(EditorOpenSwiftSourceInterface, "source.request.editor.open.interface.swiftsource")
149+
REQUEST(EditorOpenSwiftTypeInterface, "source.request.editor.open.interface.swifttype")
150+
REQUEST(EditorExtractTextFromComment, "source.request.editor.extract.comment")
151+
REQUEST(EditorClose, "source.request.editor.close")
152+
REQUEST(EditorReplaceText, "source.request.editor.replacetext")
153+
REQUEST(EditorFormatText, "source.request.editor.formattext")
154+
REQUEST(EditorExpandPlaceholder, "source.request.editor.expand_placeholder")
155+
REQUEST(EditorFindUSR, "source.request.editor.find_usr")
156+
REQUEST(EditorFindInterfaceDoc, "source.request.editor.find_interface_doc")
157+
REQUEST(BuildSettingsRegister, "source.request.buildsettings.register")
158+
REQUEST(ModuleGroups, "source.request.module.groups")
159+
REQUEST(NameTranslation, "source.request.name.translation")
160+
REQUEST(MarkupToXML, "source.request.convert.markup.xml")
161+
162+
KIND(DeclFunctionFree, "source.lang.swift.decl.function.free")
163+
KIND(RefFunctionFree, "source.lang.swift.ref.function.free")
164+
KIND(DeclMethodInstance, "source.lang.swift.decl.function.method.instance")
165+
KIND(RefMethodInstance, "source.lang.swift.ref.function.method.instance")
166+
KIND(DeclMethodStatic, "source.lang.swift.decl.function.method.static")
167+
KIND(RefMethodStatic, "source.lang.swift.ref.function.method.static")
168+
KIND(DeclMethodClass, "source.lang.swift.decl.function.method.class")
169+
KIND(RefMethodClass, "source.lang.swift.ref.function.method.class")
170+
KIND(DeclAccessorGetter, "source.lang.swift.decl.function.accessor.getter")
171+
KIND(RefAccessorGetter, "source.lang.swift.ref.function.accessor.getter")
172+
KIND(DeclAccessorSetter, "source.lang.swift.decl.function.accessor.setter")
173+
KIND(RefAccessorSetter, "source.lang.swift.ref.function.accessor.setter")
174+
KIND(DeclAccessorWillSet, "source.lang.swift.decl.function.accessor.willset")
175+
KIND(RefAccessorWillSet, "source.lang.swift.ref.function.accessor.willset")
176+
KIND(DeclAccessorDidSet, "source.lang.swift.decl.function.accessor.didset")
177+
KIND(RefAccessorDidSet, "source.lang.swift.ref.function.accessor.didset")
178+
KIND(DeclAccessorAddress, "source.lang.swift.decl.function.accessor.address")
179+
KIND(RefAccessorAddress, "source.lang.swift.ref.function.accessor.address")
180+
KIND(DeclAccessorMutableAddress, "source.lang.swift.decl.function.accessor.mutableaddress")
181+
KIND(RefAccessorMutableAddress, "source.lang.swift.ref.function.accessor.mutableaddress")
182+
KIND(DeclConstructor, "source.lang.swift.decl.function.constructor")
183+
KIND(RefConstructor, "source.lang.swift.ref.function.constructor")
184+
KIND(DeclDestructor, "source.lang.swift.decl.function.destructor")
185+
KIND(RefDestructor, "source.lang.swift.ref.function.destructor")
186+
KIND(DeclFunctionPrefixOperator, "source.lang.swift.decl.function.operator.prefix")
187+
KIND(DeclFunctionPostfixOperator, "source.lang.swift.decl.function.operator.postfix")
188+
KIND(DeclFunctionInfixOperator, "source.lang.swift.decl.function.operator.infix")
189+
KIND(RefFunctionPrefixOperator, "source.lang.swift.ref.function.operator.prefix")
190+
KIND(RefFunctionPostfixOperator, "source.lang.swift.ref.function.operator.postfix")
191+
KIND(RefFunctionInfixOperator, "source.lang.swift.ref.function.operator.infix")
192+
KIND(DeclPrecedenceGroup, "source.lang.swift.decl.precedencegroup")
193+
KIND(RefPrecedenceGroup, "source.lang.swift.ref.precedencegroup")
194+
KIND(DeclSubscript, "source.lang.swift.decl.function.subscript")
195+
KIND(RefSubscript, "source.lang.swift.ref.function.subscript")
196+
KIND(DeclVarGlobal, "source.lang.swift.decl.var.global")
197+
KIND(RefVarGlobal, "source.lang.swift.ref.var.global")
198+
KIND(DeclVarInstance, "source.lang.swift.decl.var.instance")
199+
KIND(RefVarInstance, "source.lang.swift.ref.var.instance")
200+
KIND(DeclVarStatic, "source.lang.swift.decl.var.static")
201+
KIND(RefVarStatic, "source.lang.swift.ref.var.static")
202+
KIND(DeclVarClass, "source.lang.swift.decl.var.class")
203+
KIND(RefVarClass, "source.lang.swift.ref.var.class")
204+
KIND(DeclVarLocal, "source.lang.swift.decl.var.local")
205+
KIND(RefVarLocal, "source.lang.swift.ref.var.local")
206+
KIND(DeclVarParam, "source.lang.swift.decl.var.parameter")
207+
KIND(DeclModule, "source.lang.swift.decl.module")
208+
KIND(DeclClass, "source.lang.swift.decl.class")
209+
KIND(RefClass, "source.lang.swift.ref.class")
210+
KIND(DeclStruct, "source.lang.swift.decl.struct")
211+
KIND(RefStruct, "source.lang.swift.ref.struct")
212+
KIND(DeclEnum, "source.lang.swift.decl.enum")
213+
KIND(RefEnum, "source.lang.swift.ref.enum")
214+
KIND(DeclEnumCase, "source.lang.swift.decl.enumcase")
215+
KIND(DeclEnumElement, "source.lang.swift.decl.enumelement")
216+
KIND(RefEnumElement, "source.lang.swift.ref.enumelement")
217+
KIND(DeclProtocol, "source.lang.swift.decl.protocol")
218+
KIND(RefProtocol, "source.lang.swift.ref.protocol")
219+
KIND(DeclExtension, "source.lang.swift.decl.extension")
220+
KIND(DeclExtensionStruct, "source.lang.swift.decl.extension.struct")
221+
KIND(DeclExtensionClass, "source.lang.swift.decl.extension.class")
222+
KIND(DeclExtensionEnum, "source.lang.swift.decl.extension.enum")
223+
KIND(DeclExtensionProtocol, "source.lang.swift.decl.extension.protocol")
224+
KIND(DeclAssociatedType, "source.lang.swift.decl.associatedtype")
225+
KIND(RefAssociatedType, "source.lang.swift.ref.associatedtype")
226+
KIND(DeclTypeAlias, "source.lang.swift.decl.typealias")
227+
KIND(RefTypeAlias, "source.lang.swift.ref.typealias")
228+
KIND(DeclGenericTypeParam, "source.lang.swift.decl.generic_type_param")
229+
KIND(RefGenericTypeParam, "source.lang.swift.ref.generic_type_param")
230+
KIND(RefModule, "source.lang.swift.ref.module")
231+
KIND(StmtForEach, "source.lang.swift.stmt.foreach")
232+
KIND(StmtFor, "source.lang.swift.stmt.for")
233+
KIND(StmtWhile, "source.lang.swift.stmt.while")
234+
KIND(StmtRepeatWhile, "source.lang.swift.stmt.repeatwhile")
235+
KIND(StmtIf, "source.lang.swift.stmt.if")
236+
KIND(StmtGuard, "source.lang.swift.stmt.guard")
237+
KIND(StmtSwitch, "source.lang.swift.stmt.switch")
238+
KIND(StmtCase, "source.lang.swift.stmt.case")
239+
KIND(StmtBrace, "source.lang.swift.stmt.brace")
240+
KIND(ExprCall, "source.lang.swift.expr.call")
241+
KIND(ExprArg, "source.lang.swift.expr.argument")
242+
KIND(ExprArray, "source.lang.swift.expr.array")
243+
KIND(ExprDictionary, "source.lang.swift.expr.dictionary")
244+
KIND(ExprObjectLiteral, "source.lang.swift.expr.object_literal")
245+
KIND(StructureElemId, "source.lang.swift.structure.elem.id")
246+
KIND(StructureElemExpr, "source.lang.swift.structure.elem.expr")
247+
KIND(StructureElemInitExpr, "source.lang.swift.structure.elem.init_expr")
248+
KIND(StructureElemCondExpr, "source.lang.swift.structure.elem.condition_expr")
249+
KIND(StructureElemPattern, "source.lang.swift.structure.elem.pattern")
250+
KIND(StructureElemTypeRef, "source.lang.swift.structure.elem.typeref")
251+
KIND(RangeSingleStatement, "source.lang.swift.range.singlestatement")
252+
KIND(RangeSingleExpression, "source.lang.swift.range.singleexpression")
253+
KIND(RangeSingleDeclaration, "source.lang.swift.range.singledeclaration")
254+
KIND(RangeMultiStatement, "source.lang.swift.range.multistatement")
255+
KIND(RangeInvalid, "source.lang.swift.range.invalid")
256+
KIND(NameObjc, "source.lang.name.kind.objc")
257+
KIND(NameSwift, "source.lang.name.kind.swift")
258+
KIND(Keyword, "source.lang.swift.syntaxtype.keyword")
259+
KIND(Identifier, "source.lang.swift.syntaxtype.identifier")
260+
KIND(TypeIdentifier, "source.lang.swift.syntaxtype.typeidentifier")
261+
KIND(BuildConfigKeyword, "source.lang.swift.syntaxtype.buildconfig.keyword")
262+
KIND(BuildConfigId, "source.lang.swift.syntaxtype.buildconfig.id")
263+
KIND(AttributeId, "source.lang.swift.syntaxtype.attribute.id")
264+
KIND(AttributeBuiltin, "source.lang.swift.syntaxtype.attribute.builtin")
265+
KIND(Number, "source.lang.swift.syntaxtype.number")
266+
KIND(String, "source.lang.swift.syntaxtype.string")
267+
KIND(StringInterpolation, "source.lang.swift.syntaxtype.string_interpolation_anchor")
268+
KIND(Comment, "source.lang.swift.syntaxtype.comment")
269+
KIND(DocComment, "source.lang.swift.syntaxtype.doccomment")
270+
KIND(DocCommentField, "source.lang.swift.syntaxtype.doccomment.field")
271+
KIND(CommentMarker, "source.lang.swift.syntaxtype.comment.mark")
272+
KIND(CommentURL, "source.lang.swift.syntaxtype.comment.url")
273+
KIND(Placeholder, "source.lang.swift.syntaxtype.placeholder")
274+
KIND(ObjectLiteral, "source.lang.swift.syntaxtype.objectliteral")
275+
276+
KIND(Expr, "source.lang.swift.expr")
277+
KIND(Stmt, "source.lang.swift.stmt")
278+
KIND(Type, "source.lang.swift.type")
279+
280+
KIND(DiagNote, "source.diagnostic.severity.note")
281+
KIND(DiagWarning, "source.diagnostic.severity.warning")
282+
KIND(DiagError, "source.diagnostic.severity.error")
283+
284+
KIND(CodeCompletionKeyword, "source.codecompletion.keyword")
285+
KIND(CodeCompletionEverything, "source.codecompletion.everything")
286+
KIND(CodeCompletionModule, "source.codecompletion.module")
287+
KIND(CodeCompletionCodeCompleteKeyword, "source.codecompletion.keyword")
288+
KIND(CodeCompletionLiteral, "source.codecompletion.literal")
289+
KIND(CodeCompletionCustom, "source.codecompletion.custom")
290+
KIND(CodeCompletionIdentifier, "source.codecompletion.identifier")
291+
KIND(CodeCompletionDescription, "source.codecompletion.description")
292+
293+
#undef KIND
294+
#undef REQUEST
295+
#undef KEY

tools/SourceKit/lib/SwiftLang/SwiftEditorInterfaceGen.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,7 @@ void SwiftLangSupport::editorOpenHeaderInterface(EditorConsumer &Consumer,
801801
StringRef Name,
802802
StringRef HeaderName,
803803
ArrayRef<const char *> Args,
804+
bool UsingSwiftArgs,
804805
bool SynthesizedExtensions,
805806
Optional<unsigned> swiftVersion) {
806807
CompilerInstance CI;
@@ -810,13 +811,15 @@ void SwiftLangSupport::editorOpenHeaderInterface(EditorConsumer &Consumer,
810811

811812
CompilerInvocation Invocation;
812813
std::string Error;
813-
if (getASTManager().initCompilerInvocation(Invocation, llvm::None, CI.getDiags(),
814+
815+
ArrayRef<const char *> SwiftArgs = UsingSwiftArgs ? Args : llvm::None;
816+
if (getASTManager().initCompilerInvocation(Invocation, SwiftArgs, CI.getDiags(),
814817
StringRef(), Error)) {
815818
Consumer.handleRequestError(Error.c_str());
816819
return;
817820
}
818821

819-
if (initInvocationByClangArguments(Args, Invocation, Error)) {
822+
if (!UsingSwiftArgs && initInvocationByClangArguments(Args, Invocation, Error)) {
820823
Consumer.handleRequestError(Error.c_str());
821824
return;
822825
}

0 commit comments

Comments
 (0)