@@ -547,6 +547,28 @@ bool includeDeclsForFile(DWriterData data, string filename)
547547 || data.options.includeDeclFilenamePatterns.match(filename);
548548}
549549
550+ long getDeclarationOrder (Declaration d, DWriterData data)
551+ {
552+ foreach_reverse (ref pattern; data.options.declarationOrder)
553+ {
554+ DeclarationMatch match;
555+ if (isDeclarationMatch(pattern.match, match, d, data.semantic))
556+ {
557+ return pattern.order;
558+ }
559+ }
560+ return 0 ;
561+ }
562+
563+ bool cmpDeclarationLoc2 (Declaration a, Declaration b, DWriterData data)
564+ {
565+ long orderA = getDeclarationOrder(a, data);
566+ long orderB = getDeclarationOrder(b, data);
567+ if (orderA != orderB)
568+ return orderA < orderB;
569+ return cmpDeclarationLoc (a, b, data.semantic);
570+ }
571+
550572void selectDeclarations (DWriterData data)
551573{
552574 auto semantic = data.semantic;
@@ -805,7 +827,7 @@ void selectDeclarations(DWriterData data)
805827
806828 foreach (name, ref decls2; data.declsByFile)
807829 {
808- decls2.sort! ((a, b) => cmpDeclarationLoc (a, b, semantic ));
830+ decls2.sort! ((a, b) => cmpDeclarationLoc2 (a, b, data ));
809831
810832 ImportInfo[string ] neededImports;
811833 bool [string ] neededPackages;
0 commit comments