doc/FormattingDecisionComments/columns.py (47 lines of code) (raw):
# Copyright (c) Facebook, Inc. and its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import csv
import os
from io import StringIO
data = [
("OTP", "../../../otp"),
("kazoo", "../../../kazoo"),
("Inaka", "../../../../inaka"),
("MongooseIM", "../../../MongooseIM"),
("ejabberd", "../../../ejabberd"),
("WhatsApp", "~/local/whatsapp/server/erl"),
]
def genplot(name, path):
out = os.popen(f"./columns.sh {path}").read()
csvfile = StringIO(out)
reader = csv.reader(csvfile, delimiter=',')
rows = [row for row in reader]
spaces = [int(row[0]) for row in rows]
counts = [int(row[1]) for row in rows]
total = sum(counts)
percentages = [(c * 100) / total for c in counts]
# filter out insignificant numbers, counts less than 10 and percentages less than 1
filtered = [(s, p) for (s, c, p) in zip(spaces, counts, percentages) if p >= 1 and c >= 10]
xs = [x for (x, y) in filtered]
ys = [y for (x, y) in filtered]
print("{")
print(f"x: {xs},")
print(f"y: {ys},")
print("mode: 'markers',")
print("type: 'scatter',")
print(f"name: '{name}'")
print("},")
print("""
<!-- generated by Makefile (python3 columns.py) -->
<html>
<head>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>
<body>
""")
print(f"""
<div id="myPlot"></div>
</div>
<script>
var data = [
""")
for (name, path) in data:
genplot(name, path)
print(f"""
];
var layout =
""")
print("{")
print(f"""
title: 'Percentage of comments at column number',
""")
print("""
xaxis: {
title: 'comment starts at column number'
},
yaxis: {
title: 'percentage of comments'
}
};
""")
print(f"""
Plotly.newPlot('myPlot', data, layout);
</script>
""")
print("""
</body>
</html>
""")