@@ -25,11 +25,17 @@ function ratio(part, total) {
2525 return part / total
2626}
2727
28+ let defaults = {
29+ useUnstableLocations : false
30+ }
31+
2832/**
2933 * Analyze CSS
3034 * @param {string } css
3135 */
32- function analyze ( css ) {
36+ function analyze ( css , options = { } ) {
37+ let settings = Object . assign ( { } , defaults , options )
38+ let useLocations = settings . useUnstableLocations === true
3339 let start = Date . now ( )
3440
3541 /**
@@ -75,16 +81,16 @@ function analyze(css) {
7581 let totalAtRules = 0
7682 /** @type {{[property: string]: string}[] } */
7783 let fontfaces = [ ]
78- let layers = new Collection ( )
79- let imports = new Collection ( )
80- let medias = new Collection ( )
81- let mediaBrowserhacks = new Collection ( )
82- let charsets = new Collection ( )
83- let supports = new Collection ( )
84- let supportsBrowserhacks = new Collection ( )
85- let keyframes = new Collection ( )
86- let prefixedKeyframes = new Collection ( )
87- let containers = new Collection ( )
84+ let layers = new Collection ( { useLocations } )
85+ let imports = new Collection ( { useLocations } )
86+ let medias = new Collection ( { useLocations } )
87+ let mediaBrowserhacks = new Collection ( { useLocations } )
88+ let charsets = new Collection ( { useLocations } )
89+ let supports = new Collection ( { useLocations } )
90+ let supportsBrowserhacks = new Collection ( { useLocations } )
91+ let keyframes = new Collection ( { useLocations } )
92+ let prefixedKeyframes = new Collection ( { useLocations } )
93+ let containers = new Collection ( { useLocations } )
8894
8995 // Rules
9096 let totalRules = 0
@@ -94,9 +100,9 @@ function analyze(css) {
94100 let declarationsPerRule = new AggregateCollection ( )
95101
96102 // Selectors
97- let keyframeSelectors = new Collection ( )
103+ let keyframeSelectors = new Collection ( { useLocations } )
98104 let uniqueSelectors = new Set ( )
99- let prefixedSelectors = new Collection ( )
105+ let prefixedSelectors = new Collection ( { useLocations } )
100106 /** @type {Specificity } */
101107 let maxSpecificity
102108 /** @type {Specificity } */
@@ -108,35 +114,35 @@ function analyze(css) {
108114 let selectorComplexities = new AggregateCollection ( )
109115 /** @type {Specificity[] } */
110116 let specificities = [ ]
111- let ids = new Collection ( )
112- let a11y = new Collection ( )
117+ let ids = new Collection ( { useLocations } )
118+ let a11y = new Collection ( { useLocations } )
113119
114120 // Declarations
115121 let uniqueDeclarations = new Set ( )
116122 let totalDeclarations = 0
117123 let importantDeclarations = 0
118124 let importantsInKeyframes = 0
119- let importantCustomProperties = new Collection ( )
125+ let importantCustomProperties = new Collection ( { useLocations } )
120126
121127 // Properties
122- let properties = new Collection ( )
123- let propertyHacks = new Collection ( )
124- let propertyVendorPrefixes = new Collection ( )
125- let customProperties = new Collection ( )
128+ let properties = new Collection ( { useLocations } )
129+ let propertyHacks = new Collection ( { useLocations } )
130+ let propertyVendorPrefixes = new Collection ( { useLocations } )
131+ let customProperties = new Collection ( { useLocations } )
126132 let propertyComplexities = new AggregateCollection ( )
127133
128134 // Values
129- let vendorPrefixedValues = new Collection ( )
130- let valueBrowserhacks = new Collection ( )
131- let zindex = new Collection ( )
132- let textShadows = new Collection ( )
133- let boxShadows = new Collection ( )
134- let fontFamilies = new Collection ( )
135- let fontSizes = new Collection ( )
136- let lineHeights = new Collection ( )
137- let timingFunctions = new Collection ( )
138- let durations = new Collection ( )
139- let colors = new ContextCollection ( )
135+ let vendorPrefixedValues = new Collection ( { useLocations } )
136+ let valueBrowserhacks = new Collection ( { useLocations } )
137+ let zindex = new Collection ( { useLocations } )
138+ let textShadows = new Collection ( { useLocations } )
139+ let boxShadows = new Collection ( { useLocations } )
140+ let fontFamilies = new Collection ( { useLocations } )
141+ let fontSizes = new Collection ( { useLocations } )
142+ let lineHeights = new Collection ( { useLocations } )
143+ let timingFunctions = new Collection ( { useLocations } )
144+ let durations = new Collection ( { useLocations } )
145+ let colors = new ContextCollection ( { useLocations } )
140146 let colorFormats = new CountableCollection ( )
141147 let units = new ContextCollection ( )
142148 let gradients = new CountableCollection ( )
@@ -364,12 +370,12 @@ function analyze(css) {
364370
365371 break
366372 } else if ( isProperty ( 'font-size' , property ) ) {
367- if ( ! isFontKeyword ( node ) ) {
373+ if ( ! isSystemFont ( node ) ) {
368374 fontSizes . push ( stringifyNode ( node ) , node . loc )
369375 }
370376 break
371377 } else if ( isProperty ( 'font-family' , property ) ) {
372- if ( ! isFontKeyword ( node ) ) {
378+ if ( ! isSystemFont ( node ) ) {
373379 fontFamilies . push ( stringifyNode ( node ) , node . loc )
374380 }
375381 break
0 commit comments